我按照快速入门实现了大部分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 进行身份验证?
答案 0 :(得分:0)
当用户登录时,您会在声明中提出一项名为aud
的声明。它的值应该是clientId。然后,您可以获得一些自定义授权,拒绝或允许对应用程序进行授权。