在具有Identity Framework的.net项目中,我无法续订令牌,即使我可以生成令牌。例外情况如下:
[ArgumentNullException: Value cannot be null.
Parameter name: token]
Microsoft.Owin.Security.Infrastructure.AuthenticationTokenReceiveContext..ctor(IOwinContext context, ISecureDataFormat`1 secureDataFormat, String token) +136
Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointRefreshTokenGrantAsync>d__44.MoveNext() +158
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +25
Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointAsync>d__1e.MoveNext() +2159
由于此异常,调试器甚至无法进入令牌刷新功能:
public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin");
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
string hashedTokenId = Helper.GetHash(context.Token);
using (AuthRepository _repo = new AuthRepository())
{
var refreshToken = await _repo.FindRefreshToken(hashedTokenId);
if (refreshToken != null )
{
//Get protectedTicket from refreshToken class
context.DeserializeTicket(refreshToken.ProtectedTicket);
var result = await _repo.RemoveRefreshToken(hashedTokenId);
}
}
}
我正在使用Postman进行调试,并且发布的请求包含正确的令牌,在请求正文中未检测到,也未在请求标头中检测到。
Katana开发团队已将此标记为错误:http://katanaproject.codeplex.com/workitem/480但也表示不会有任何更新。
相同的代码库在远程服务器上运行:http://ngauthenticationweb.azurewebsites.net/
可以在以下网址找到完整的项目:https://github.com/tjoudeh/AngularJSAuthentication
我如何强制令牌进入上下文,以防止异常?
答案 0 :(得分:0)
Could you check the grant_type and client_id in postman? The grant_type should be 'password'.
Sample: username=abcd&password=abc@123&grant_type=password&client_id=c4b2f91dbe014b558d7fa00ca54ed33d
答案 1 :(得分:0)
您需要在 postman 中包含授权标头,以便系统知道用户有权刷新令牌。
示例: