将FedAuth cookies从WebApi控制器传递给RestSharp

将FedAuth cookies从WebApi控制器传递给RestSharp,cookies,asp.net-web-api,single-sign-on,restsharp,ws-federation,Cookies,Asp.net Web Api,Single Sign On,Restsharp,Ws Federation,我们有一个thinktecture支持的身份服务器,用于SSO。有几种服务利用该身份服务器。我的应用程序使用ASP.net WebApi控制器来处理UI请求。对于特定的请求,我必须对上述服务之一进行RESTAPI调用。当然,该服务需要身份验证。我试图做的是将当前请求中的FedAuth Cookie传递给RestSharp客户端: [HttpGet] [Route("api/testroute")] public IHttpActionResult Test() {

我们有一个thinktecture支持的身份服务器,用于SSO。有几种服务利用该身份服务器。我的应用程序使用ASP.net WebApi控制器来处理UI请求。对于特定的请求,我必须对上述服务之一进行RESTAPI调用。当然,该服务需要身份验证。我试图做的是将当前请求中的FedAuth Cookie传递给RestSharp客户端:

    [HttpGet]
    [Route("api/testroute")]
    public IHttpActionResult Test()
    {
        var client = new RestSharp.RestClient(_someBaseUrl);
        var req = new RestSharp.RestRequest(_someUrl);
        var cookies = Request
            .Headers
            .GetCookies()
            .SelectMany(x => x.Cookies)
            .Where(x => x.Name.StartsWith("FedAuth"))
            .ToList();

        foreach (var cookie in cookies)
        {
            req.AddCookie(cookie.Name, cookie.Value);
        }

        var resp = client.Execute(req);
        return Ok(resp);
    }
RestSharp客户端调用失败,错误代码为500,内部有以下stacktrace:

[FormatException: Invalid length for a Base-64 char array or string.]
System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength) +14390795
System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) +162
System.Convert.FromBase64String(String s) +56
System.IdentityModel.Services.ChunkedCookieHandler.ReadInternal(String name, HttpCookieCollection requestCookies) +424
System.IdentityModel.Services.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken) +99
System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) +173
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165

我的用户授权方法正确吗?如果是这样的话,我是不是对cookie做了什么错事(从stacktrace上看,它们好像被破坏了)?

我认为您的
FedAuth
cookie是被编码的。也许您可以检查FedAuth cookie是否包含类似于
'%'
的字符。如果是,只需在使用前对FedAuth进行解码即可