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

时间:2015-09-17 18:13:45

标签: cookies asp.net-web-api single-sign-on restsharp ws-federation

我们有一个用于SSO的thinktecture驱动的身份服务器。有几种服务使用该身份服务器。我的应用程序使用ASP.net WebApi控制器来处理UI请求。对于特定请求,我必须对上述服务之一进行REST API调用。该服务当然需要身份验证。我想要做的是将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错误代码,其中包含以下堆栈跟踪:

[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做错了(从堆栈跟踪看起来它们已经被破坏了)?

1 个答案:

答案 0 :(得分:0)

我认为您的FedAuth Cookie已编码。也许您可以检查您的FedAuth cookie是否包含'%'之类的字符。如果是,请在使用前解码FedAuth