我们有一个用于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做错了(从堆栈跟踪看起来它们已经被破坏了)?
答案 0 :(得分:0)
我认为您的FedAuth
Cookie已编码。也许您可以检查您的FedAuth cookie是否包含'%'
之类的字符。如果是,请在使用前解码FedAuth
。