複数のアプリ用のOAuth共有承認サーバー


8

私のショップには、認証に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)がユーザーのトークンにカスタムクレームを追加できないことを意味しますか?承認サーバーでトークンを要求しているアプリケーションに固有のクレームを追加できますか、または承認サーバーが要求しているアプリに基づいて特定のクレームを追加するように何かを整える必要がありますか?


この質問の将来の視聴者のために、消費するリソースがカスタムクレームを追加するための解決策を見つけられませんでした。各リソースサーバーの共通構成を受け入れ、それに基づいてカスタムクレームを生成する承認サーバーを作成することになりました。
Joshua Barron、

中央データベースでクレームを管理し、トークンが発行されたときにデータを入力する必要があるようです。OAuth自体は、実際には認証/トークン発行のみです。承認は引き続き、プラグイン(クレーム、ロールなど)して個別に管理する必要があります。
Kasey Speakman、2015年

回答:


1

過去には、トークンを発行する認証サーバーが1つありました。次に、クライアントは次の形式のリクエストで認証トークンを認可サーバーに送信しました。

「このapplication_idを持つクライアントは、添付の認証トークンで定義されているユーザーがコンテンツXにアクセスするためのアクセスを要求しています。」

承認サーバーは、ユーザーが承認されていることを確認し、クライアントに新しい承認トークンを発行しました。次に、クライアントはこのトークンをコンテンツXを提供するサービスに渡しました。

この場合の許可サーバーは、新しいコンテンツYを知るために構成を更新する必要がありました。

これを変更して、リソースサーバーが承認サーバーに、添付されたカスタムクレームを含むトークンを作成するように要求できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.