在具有Identity Framework的.net项目中,即使我可以生成令牌,但无法续订令牌。唯一的例外是如下:在令牌刷新时,AuthenticationTokenReceiveContext无法访问Owin.Security/Identity Framework中的令牌值
[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);
}
}
}
我使用邮差调试,并张贴请求包含正确令牌,这在请求正文中未检测到,在请求头中也没有。
武士刀开发团队已将此标记为一个bug:http://katanaproject.codeplex.com/workitem/480,但也表示没有更新即将到来。
的相同的代码运行在远程服务器上:在此可以重现http://ngauthenticationweb.azurewebsites.net/
完整的项目,请访问:https://github.com/tjoudeh/AngularJSAuthentication
我怎么能强迫令牌插入的背景下,为了防止异常?
grant_type是在初始登录时 '密码' 和它的伟大工程。不起作用的是'refresh_token'的grant_type - 它用于基于刷新令牌的重新认证。 – Kurak