Я використовую шаблон Web Api 2, який постачається разом з Visual Studio 2013, має проміжне програмне забезпечення OWIN для автентифікації користувачів тощо.
У OAuthAuthorizationServerOptions
I зауважив , що 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
};
Це не підходить для мого останнього проекту. Я хотів би роздати короткочасні файли bearer_tokens, які можна оновити за допомогоюrefresh_token
Я багато разів гуглив і не можу знайти нічого корисного.
Тож ось як далеко мені вдалося пройти. Зараз я дійшов до точки "WTF do I now".
Я написав a, RefreshTokenProvider
який реалізує IAuthenticationTokenProvider
відповідно до RefreshTokenProvider
властивості OAuthAuthorizationServerOptions
класу:
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
};
Отже, коли хтось просить a, bearer_token
я зараз надсилаю a refresh_token
, що чудово.
Тож як тепер я використовую цей refresh_token для отримання нового bearer_token
, імовірно, мені потрібно надіслати запит до своєї кінцевої точки маркера з набором певних заголовків HTTP?
Просто думаючи вголос під час набору тексту ... Чи повинен я обробляти термін дії refresh_token у своєму SimpleRefreshTokenProvider
? Як клієнт отримає новий refresh_token
?
Я дійсно міг би попрацювати з деякими матеріалами для читання / документацією, тому що я не хочу це неправильно сприймати і хотів би дотримуватися якогось стандарту.