2017-02-15 2 views
0

Web APIと異なるクライアント(モバイルアプリケーション、ブラウザ)を使用してアプリケーションを作成しています。私は同じユーザーのための各クライアントの種類ごとに異なるアクセストークンを持っています。その理由は、ユーザーが1つのデバイスからサインアウトすることができますが、他のデバイスにログインしたままになります(Facebookの場合と同様です)。ASP .NET Web APIで異なるクライアントタイプの複数のトークンを作成する方法

私は、ASP .Net Identityフレームワークが、クライアントタイプを無視しているユーザーに対して単一のトークンを生成することを知っています。他のフレームワークはありますか?または、クライアントの詳細をデータベースに保存しておく必要がありますか?

+0

まだ結論に達していませんか? –

+0

あなたが提案した実装を開始しました。すぐに更新されます。副メモでは、サインアウトのために、クライアント側でトークンを忘れてしまうと言う人がいます。これ以上安全な方法はありますか? – HSharma

+0

クライアント側でトークンを忘れるのは良い方法です。その設定とは別に、サーバーでのトークンの有効期限が短くなるほど良いでしょう。 –

答えて

1

トークンを手動で作成することができ、その時点でトークンにクレームを追加してクライアントに戻すことができます。クライアントがサーバーに要求すると、トークンからクレームを抽出し、デバイスの種類を決定することができます。

以下のようなトークンを作成します。

var identity = new ClaimsIdentity(Startup.OAuthOptions.AuthenticationType); 

AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties()); 
var currentUtc = new SystemClock().UtcNow; 
identity.AddClaim(new Claim("device_type", "android/ios/web")); 

ticket.Properties.IssuedUtc = currentUtc; 
var expiryInterval = int.Parse("20"); 

var access_token = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket); 

アクセス要求におけるトークンとトークンからの請求を下記の通り:

ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal; 
var customClaimValue = principal.Claims.Where(c => c.Type == "device_type").Single().Value; 

は「customClaimValueは」使用中のデバイスの種類を持っている必要があります。

2

私は、さまざまなクライアントのための異なるトークンを生成することはあなたの目標を達成するために必要ではないと信じています。まず、asp.netで/トークンエンドポイントへのトークン要求ごとに新しいベアラトークンが発行されます。

したがって、各クライアントには、要求ごとに異なるトークンが発行されます。その後、クライアント(Web、モバイル、その他)は、トークンを保存し、それを使用して許可されたリソースにアクセスすることができます。ログアウトは、クライアント側のトークンを忘れることに過ぎません。

注:セキュリティ上の理由から、有効期限が短いトークンを発行することを忘れないでください。期限切れになると、新しいトークンを発行するためにリフレッシュトークンの終了を使用できます。

関連する問題