1

oAuth2/IdentityServer4について頭を悩ませようとしています。

https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Quickstarts/3_ImplicitFlowAuthenticationでサンプル アプリケーションを使用する

MVC アプリケーションの次のコード:

 @foreach (var claim in User.Claims)
    {
        <dt>@claim.Type</dt>
        <dd>@claim.Value</dd>
    }

ID トークン クレームのように見えるものを返します

nbf
1467173142
exp
1467173442
iss
http://localhost:5000
aud
mvc
nonce
636027699106782287.MDI0YzI5MTQtYmQxNy00MDllLWJmYzQtZjBhYzI2MGNjYmE3MDFmNzg1YmUtM2Y5ZC00YjBiLWEzOGItN2Q3ODRiODJlYjFl
iat
1467173142
c_hash
H2i5QeJKlHM5-s8vUTYlOw
sid
42b58d38e2b7c6cc653492742a08840b
sub
818727
auth_time
1467170555
idp
idsvr
name
Alice Smith
given_name
Alice
family_name
Smith
website
http://alice.com
amr
pwd

API プロジェクトの次のコード

 var claims = User.Claims.Select(c => new { c.Type, c.Value });
 return new JsonResult(claims);

アクセス トークン クレームのように見えるものを返します

{
   "Type": "nbf",
   "Value": "1467173142"
},
{
   "Type": "exp",
   "Value": "1467176742"
},
{
   "Type": "iss",
   "Value": "http://localhost:5000"
},
{
   "Type": "aud",
   "Value": "http://localhost:5000/resources"
},
{
   "Type": "client_id",
   "Value": "mvc"
},
{
   "Type": "scope",
   "Value": "openid"
},
{
   "Type": "scope",
   "Value": "profile"
},
{
   "Type": "scope",
  "Value": "api1"
},
{
   "Type": "sub",
   "Value": "818727"
},
{
   "Type": "auth_time",
   "Value": "1467170555"
},
{
   "Type": "idp",
   "Value": "idsvr"
}

コードは基本的に同じ (ユーザー ID 原則でクレームを返す) であり、名前/電子メールが欠落していますが、API の例にスコープ クレームが含まれていることに注意してください。

トークン フローは基本的に IdentityServer4 => MVC プロジェクト => API プロジェクトです。明らかに、MVC プロジェクトには identityToken とアクセス トークンの両方がありますが、アクセス トークン int User.Claims はロードされません。

私の目標は、MVC プロジェクトの User でスコープ クレームを使用できるようにして、MVC メソッドの Authorize 属性セクションを動作させるポリシーを設定できるようにすることです。

API プロジェクトのスタートアップはこちら: https://github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Quickstarts/3_ImplicitFlowAuthentication/src/Api/Startup.cs

MVC プロジェクトのスタートアップはこちら: https://github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Quickstarts/3_ImplicitFlowAuthentication/src/Api/Startup.cs

ありがとう、デイブ

4

1 に答える 1

5

質問はちょっと無効ですが、理由と他の人の時間を節約するための解決策とともにここに残します.

まず、2 つの異なる目的のために 2 つのトークンがあります。

  1. アクセス トークン: API を使用するソフトウェアであるクライアントについて説明します。ここにあるすべてのクレームは、クライアントに API エンドポイントへのアクセスを許可しています。

  2. ID トークン: これは、API を使用するソフトウェアを使用するユーザーまたは人間を表します。

元の質問は、Identity トークンでクライアント関連のスコープを表示する方法を尋ねるものでしたが、これは明らかに有効ではありません。

ただし、Identity トークンに Identity スコープを含めることはできます。

これを行うには、次のように Type を ScopeType.Resource に設定し、IncludeAllClaimsForUser を true に設定します。

 new Scope()
            {
              Name  = "ManageUsers",
              IncludeAllClaimsForUser = true,
              Type = ScopeType.Resource
            },
于 2016-06-30T01:34:13.090 に答える