私のショップには、認証にOAuthトークンを使用する.NET Web APIがいくつかあります。現在、各Web APIは承認とリソースサーバーの両方です。ユーザーは、同じ資格情報を使用してこれらすべてのAPIに対して認証を行いますが、現時点では、各APIに対して個別に認証する必要があります。
共有認証サーバーの作成に興味があります(http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/)、しかし私はクレームの変換に悩まされています。次の例のように、発行されたトークンに(アプリケーションに固有の)カスタムクレームを追加できると便利です。
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
/* validate credentials here... */
var identity = new ClaimsIdentity("JWT");
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "Manager"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor"));
var props = new AuthenticationProperties(new Dictionary<string, string>
{
{
"audience", (context.ClientId == null) ? string.Empty : context.ClientId
}
});
var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
return Task.FromResult<object>(null);
}
私が見ることができることから、共通の承認サーバーを作成する場合、すべてのクレーム変換がそこで発生する必要があります。これは、リソースサーバー(別のWeb API)がユーザーのトークンにカスタムクレームを追加できないことを意味しますか?承認サーバーでトークンを要求しているアプリケーションに固有のクレームを追加できますか、または承認サーバーが要求しているアプリに基づいて特定のクレームを追加するように何かを整える必要がありますか?