如何确定IdentityServer4中使用了哪个客户端

时间:2018-01-12 15:39:18

标签: oauth-2.0 asp.net-core-2.0 identityserver4

我按照快速入门实现了大部分IdentityServer4和.NET Core 2,效果很好。 但是,我希望将访问权限与应用程序以及在同一Web上运行的API分开。我在同一个网站上运行了一个应用程序和一个API,我希望在应用程序还需要登录时提供对此API的安全访问。

因此,在网站上,我希望用户能够访问应用程序以及API。 但是对于只应访问API的外部应用程序,我希望他们无法访问应用程序的其余部分。

据我所知,我可以通过2个不同的网站来实现这一点:一个用于应用程序,一个用于API,但我希望它们都在同一个URL上。

所以我认为我只需要将2个不同的客户端连接到同一个用户数据库(使用ASP.NET身份):

 new Client
 {
     ClientId = "sapi",
     ClientName = "Secure API",
     AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

     RequireConsent = true,

     ClientSecrets =
     {
         new Secret("secret".Sha256())
     },
     RedirectUris = { "http://localhost:5002/signin-oidc" },
     PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

     AllowedScopes = { "sapi" }
 },

 // OpenID Connect hybrid flow and client credentials client (MVC)
 new Client
 {
     ClientId = "mvc",
     ClientName = "MVC Client",
     AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

     RequireConsent = false,

     ClientSecrets =
     {
         new Secret("secret".Sha256())
     },

     RedirectUris = { "http://localhost:5002/signin-oidc" },
     PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

     AllowedScopes =
     {
         IdentityServerConstants.StandardScopes.OpenId,
         IdentityServerConstants.StandardScopes.Profile,
         "sapi"
     },
     AllowOfflineAccess = true
 }

所以我们的想法是客户端 mvc 可以访问应用程序和API,而 sapi 客户端只能访问API而不能访问应用程序。任何用户(存储在ASP.NET标识中)都可以与客户端 mvc sapi 一起使用。

问题是如何判断用户是否已使用客户端 mvc 或使用客户端 sapi 进行身份验证?

1 个答案:

答案 0 :(得分:0)

当用户登录时,您会在声明中提出一项名为aud的声明。它的值应该是clientId。然后,您可以获得一些自定义授权,拒绝或允许对应用程序进行授权。