Asp.net core mvc 获取IdentityServer4中声明主体中的访问令牌声明

Asp.net core mvc 获取IdentityServer4中声明主体中的访问令牌声明,asp.net-core-mvc,identityserver4,asp.net-core-webapi,Asp.net Core Mvc,Identityserver4,Asp.net Core Webapi,我正试图了解oAuth2/IdentityServer 4 使用位于的示例应用程序 MVC应用程序中的以下代码: @foreach (var claim in User.Claims) { <dt>@claim.Type</dt> <dd>@claim.Value</dd> } 返回似乎是访问令牌声明的内容 { "Type": "nbf", "Value": "1467173142"

我正试图了解oAuth2/IdentityServer 4

使用位于的示例应用程序

MVC应用程序中的以下代码:

 @foreach (var claim in User.Claims)
    {
        <dt>@claim.Type</dt>
        <dd>@claim.Value</dd>
    }
返回似乎是访问令牌声明的内容

{
   "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"
}
注意,代码本质上与用户身份原则中的返回声明相同,并且没有名称/电子邮件,但在API示例中包含了范围声明

令牌流本质上是IdentityServer4=>MVC项目=>API项目。显然,MVC项目既有identityToken,也有access token,但它没有加载access token int User.Claims

我的目标是让MVC项目中的用户可以使用范围声明,这样我就可以设置策略来使用MVC方法的Authorize属性部分

API项目的启动程序如下:

MVC项目的启动程序如下:

谢谢,
戴夫:这个问题有点无效,但我将把它留在这里,说明原因和一个节省他人时间的解决方案

首先,有两种不同用途的代币

访问令牌:描述客户端,即使用API的软件。这里的任何声明都是授予客户端访问API端点的权限

标识令牌:它描述使用API的软件的用户或人员

最初的问题是询问如何在标识令牌中查看与客户端相关的作用域,这显然是无效的

但是,您可以在标识令牌中包含标识作用域

为此,请将Type设置为ScopeType.Resource,并将includealclaimsforuser设置为true,如下所示

 new Scope()
            {
              Name  = "ManageUsers",
              IncludeAllClaimsForUser = true,
              Type = ScopeType.Resource
            },

这个问题有点无效,但我会把它放在这里,说明原因和一个节省他人时间的解决方案

首先,有两种不同用途的代币

访问令牌:描述客户端,即使用API的软件。这里的任何声明都是授予客户端访问API端点的权限

标识令牌:它描述使用API的软件的用户或人员

最初的问题是询问如何在标识令牌中查看与客户端相关的作用域,这显然是无效的

但是,您可以在标识令牌中包含标识作用域

为此,请将Type设置为ScopeType.Resource,并将includealclaimsforuser设置为true,如下所示

 new Scope()
            {
              Name  = "ManageUsers",
              IncludeAllClaimsForUser = true,
              Type = ScopeType.Resource
            },