最佳答案
我使用的是 Visual Studio 2013附带的 Web Api 2模板,它具有一些 OWIN 中间件来进行用户身份验证等等。
在 OAuthAuthorizationServerOptions
中,我注意到 OAuth2服务器被设置为分发在14天内过期的令牌
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) ,
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
这不适合我最近的项目。我想分发一些短命的 berer _ tokens,它们可以使用 refresh_token
进行刷新
我谷歌了很多次,但是没有找到任何有用的东西。
这就是我的成果。我现在已经到了“我现在卧槽”的地步。
我已经编写了一个 RefreshTokenProvider
,它根据 OAuthAuthorizationServerOptions
类上的 RefreshTokenProvider
属性实现 IAuthenticationTokenProvider
:
public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider
{
private static ConcurrentDictionary<string, AuthenticationTicket> _refreshTokens = new ConcurrentDictionary<string, AuthenticationTicket>();
public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
var guid = Guid.NewGuid().ToString();
_refreshTokens.TryAdd(guid, context.Ticket);
// hash??
context.SetToken(guid);
}
public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
AuthenticationTicket ticket;
if (_refreshTokens.TryRemove(context.Token, out ticket))
{
context.SetTicket(ticket);
}
}
public void Create(AuthenticationTokenCreateContext context)
{
throw new NotImplementedException();
}
public void Receive(AuthenticationTokenReceiveContext context)
{
throw new NotImplementedException();
}
}
// Now in my Startup.Auth.cs
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) ,
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(2),
AllowInsecureHttp = true,
RefreshTokenProvider = new RefreshTokenProvider() // This is my test
};
所以现在当有人请求一个 bearer_token
,我现在发送一个 refresh_token
,这是伟大的。
那么现在我如何使用这个 refresh _ token 来获得一个新的 bearer_token
,假设我需要向我的令牌端点发送一个带有特定 HTTP Header 设置的请求呢?
只是在输入时大声地思考... ... 我应该在 SimpleRefreshTokenProvider
中处理 resh _ token 过期吗?客户如何获得新的 refresh_token
?
我真的可以做一些阅读材料/文档,因为我不想得到这个错误,并希望遵循某种标准。