Tôi đang sử dụng mẫu Web Api 2 đi kèm với Visual Studio 2013 có một số phần mềm trung gian OWIN để thực hiện Xác thực Người dùng và những thứ tương tự.
Trong phần, OAuthAuthorizationServerOptions
tôi nhận thấy rằng Máy chủ OAuth2 được thiết lập để phân phối các mã thông báo hết hạn sau 14 ngày
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
};
Điều này không phù hợp với dự án mới nhất của tôi. Tôi muốn cung cấp các thẻ bearer_tokens tồn tại trong thời gian ngắn có thể được làm mới bằng cách sử dụngrefresh_token
Tôi đã thực hiện rất nhiều googling và không tìm thấy bất kỳ điều gì hữu ích.
Vì vậy, đây là cách tôi đã cố gắng để đạt được. Bây giờ tôi đã đạt đến điểm "WTF làm tôi bây giờ".
Tôi đã viết một RefreshTokenProvider
triển khai IAuthenticationTokenProvider
theo thuộc RefreshTokenProvider
tính trên OAuthAuthorizationServerOptions
lớp:
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
};
Vì vậy, bây giờ khi ai đó yêu cầu một, bearer_token
tôi đang gửi một refresh_token
, điều đó thật tuyệt.
Vì vậy, bây giờ làm cách nào để sử dụng refresh_token này để có được một cái mới bearer_token
, có lẽ tôi cần gửi yêu cầu đến điểm cuối mã thông báo của mình với một số tiêu đề HTTP cụ thể được đặt?
Tôi chỉ nghĩ to khi nhập ... Tôi có nên xử lý hết hạn refresh_token trong của mình SimpleRefreshTokenProvider
không? Làm thế nào để một khách hàng có được một cái mới refresh_token
?
Tôi thực sự có thể làm với một số tài liệu / tài liệu đọc vì tôi không muốn làm sai điều này và muốn tuân theo một số loại tiêu chuẩn.