是否可以通过HttpClient PostAsync调用中的IOrganizationServiceProxy从IOrganizationServiceProxy发送SecurityTokenResponse到SSO门户中定义的API?

问题描述

我们有一个通过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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...