Visual Studio2013に付属のWebApi 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
};
これは私の最新のプロジェクトには適していません。を使用して更新できる短命のbearer_tokensを配布したいと思いますrefresh_token
私はたくさんのグーグルをしました、そして、何も役に立つものを見つけることができません。
だから、これは私が何とか到達したところです。「WTFdoInow」の段階になりました。
クラスのプロパティに従って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
};
だから今誰かがbearer_token
私を要求するとき私は今送っていますrefresh_token
、それは素晴らしいです。
では、このrefresh_tokenを使用して新しいものを取得するにはどうすればよいbearer_token
ですか?おそらく、特定のHTTPヘッダーを設定してトークンエンドポイントにリクエストを送信する必要がありますか?
入力しながら大声で考えてください... refresh_tokenの有効期限を処理する必要がありSimpleRefreshTokenProvider
ますか?クライアントはどのようにして新しいものを入手しrefresh_token
ますか?
私はこれを間違えたくなくて、ある種の標準に従いたいので、私はいくつかの読み物/ドキュメントで本当にすることができました。