问题描述
我们有一个通过ADFS认证的SSO门户。如果我在浏览器中调用此门户中定义的API,它将自动重定向到ADFS进行身份验证,然后使用Claim重定向到门户以调用该API。
我想做的是从CRM工作流中调用API。 如何模仿这种重定向?
我想,如果我以某种方式获得了令牌并将其放入HttpClient请求中,将会有所帮助。但是我不知道应该如何将其添加到HttpClient请求中。
这是我什至试图做的事情,我现在应该放弃并停止把头发扯掉吗??
这是我的代码不起作用,它返回一个HTML页面,我认为这是ADFS登录
protected override void Execute(CodeActivityContext executionContext)
{
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationService service = executionContext.GetExtension<IOrganizationServiceFactory>().CreateOrganizationService(context.UserId);
OrganizationServiceProxy orgSvcProxy = (service as OrganizationServiceProxy);
ITracingService tracingService = executionContext.GetExtension<ITracingService>();
SecurityToken token = orgSvcProxy.SecurityTokenResponse.Token;
GenericXmlSecurityToken genericToken = (GenericXmlSecurityToken)((Microsoft.Xrm.Sdk.Client.ServiceProxy<Microsoft.Xrm.Sdk.IOrganizationService>)(orgSvcProxy)).SecurityTokenResponse.Token;
try
{
Guid userId = context.InitiatingUserId;
if (context.Depth > 1)
return;
String apiUrl = "https://myurl.com;
try
{
using (var client = new HttpClient(new httpclienthandler
{
//UseCookies = false,//UseProxy = true,//UseDefaultCredentials = true,AllowAutoRedirect = true,}))
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.Timeout = new TimeSpan(0,2,0); // 2 minutes
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",genericToken.ProofToken.ToString());
using (var response = client.PostAsync("TestConnection",null).Result)
{
var responseText = response.Content.ReadAsstringAsync().Result;
if (response.IsSuccessstatusCode) //This is status code 200 - everything went well
{
}
}
}
}
catch (Exception ex)
{
tracingService.Trace("API call Failed: " + ex.Message);
throw ex;
}
}
}
catch (Exception ex)
{
if (ex.InnerException != null)
{
tracingService.Trace("Ccx.Xrm.Ccp.Workflow.BootstrapVirtualCareData: Failed: Message - " + ex.InnerException.Message);
}
else
{
tracingService.Trace("Ccx.Xrm.Ccp.Workflow.BootstrapVirtualCareData: Failed: Message - " + ex.Message);
}
throw ex;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)