Oauth 2.0 如何使用identityServer4设置swagger客户端声明

Oauth 2.0 如何使用identityServer4设置swagger客户端声明,oauth-2.0,swagger,asp.net-core-webapi,identityserver4,Oauth 2.0,Swagger,Asp.net Core Webapi,Identityserver4,我正在使用IDS4颁发的访问令牌保护.NET核心Web API 它可以工作,我在客户端配置中添加了一些声明,如下所示: // ... other code new Client { ClientId = "apiclient", AllowedGrantTypes = GrantTypes.ClientCredentials, ClientSecrets = { new Secret("mysupersecret".Sha256()) },

我正在使用IDS4颁发的访问令牌保护.NET核心Web API

它可以工作,我在客户端配置中添加了一些声明,如下所示:

// ... other code
new Client
{
    ClientId = "apiclient",
    AllowedGrantTypes = GrantTypes.ClientCredentials,
    ClientSecrets = {
        new Secret("mysupersecret".Sha256())
    },
    AllowedScopes = { 
        "joinot", 
        JwtClaimTypes.Role,
    },
    Claims = new List<Claim>() { new Claim("role", "WonderWoman"), new Claim("VatId", "123abc") },
},
// ... other code
/。。。其他代码
新客户
{
ClientId=“apiclient”,
AllowedGrantTypes=GrantTypes.ClientCredentials,
客户机密={
新秘密(“mysupersecret.Sha256())
},
AllowedScopes={
“儒瓦诺”,
JwtClaimTypes.Role,
},
Claims=new List(){new Claims(“角色”,“神奇女侠”),new Claims(“梵蒂德”,“123abc”)},
},
// ... 其他代码
这些是我在webapi中看到的声明

我找到了我添加的前缀“client_”

出于测试目的,我使用了swagger,我有以下配置:

new Client {
    ClientId = "swagger_api_client",
    ClientName = "Swagger API Client",
    AllowedGrantTypes = GrantTypes.Implicit,
    AllowAccessTokensViaBrowser = true,
    RedirectUris = {"http://localhost:57303/swagger/oauth2-redirect.html"},
    AllowedScopes = { 
        "joinot", 
        JwtClaimTypes.Role, 
    },
    Claims = new List<Claim>() { new Claim("role", "ManOfSteel"), new Claim("VatId", "abc123") },
    RequireConsent = false
},
新客户端{
ClientId=“swagger\u api\u客户端”,
ClientName=“Swagger API客户端”,
AllowedGrantTypes=GrantTypes.Implicit,
AllowAccessTokensViaBrowser=true,
重定向URI={”http://localhost:57303/swagger/oauth2-重定向.html“},
AllowedScopes={
“儒瓦诺”,
JwtClaimTypes.Role,
},
Claims=new List(){new Claims(“role”,“ManOfSteel”),new Claims(“VatId”,“abc123”)},
请求发送=错误
},
这意味着我必须向交互用户进行身份验证,然后才能调用webapi

当我这样做时,我在webapi中发现的声明并不像我预期的那样

“客户角色”和“客户角色”不在列表中


如何插入控制台和swagger客户端的声明?

您可以将
AlwaysSendClientClaims
设置为true:

Claims = new List<Claim>() { new Claim("role", "WonderWoman"), new Claim("VatId", "123abc") },
AlwaysSendClientClaims =true,
Claims=new List(){new Claims(“角色”,“神奇女侠”),new Claims(“梵蒂德”,“123abc”)},
AlwaysSendClientClaims=true,
如果设置,将为每个流发送客户端声明。如果不是,则仅适用于客户端凭据流(默认值为false)。因此,使用客户端凭据流的控制台应用程序即使不设置该属性也可以工作

参考文件: