我有一个 IdentityServer 和一个 MVC客户端,IdentityServer拥有自己的Web API,可以为其客户端提供用户管理。
MVC客户端使用HybridAndClientCredentials
授予类型与IdentityServer进行交互。验证客户端用户没有问题。问题是当我尝试通过身份验证的用户从IdentityServer调用某些API时,服务器返回登录视图而不是API的结果。
这是我的客户端配置:
new Client
{
ClientId = "mvc.identity.management",
ClientName = "Identity Management",
AllowedGrantTypes = GrantTypes.Hybrid,
RequireConsent = false,
ClientSecrets =
{
new Secret("somesecret".Sha256())
},
RedirectUris = { "http://localhost:5001/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5001/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}
和客户
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientSecret = "somesecret";
options.ResponseType = "code id_token";
options.GetClaimsFromUserInfoEndpoint = true;
options.ClientId = "mvc.identity.management";
options.SaveTokens = true;
});
任何建议都会有所帮助。
答案 0 :(得分:0)
也许为时已晚,但其他人可能会提出这个问题。
解决方案是使用 LocalApi
,它是 IdentityServer4
的内置功能。
您创建一个 LocalApi
并使用自定义范围对其进行授权,您的客户应添加该范围 IdentityServerApi
。
完整资源可在此处获得:
https://docs.identityserver.io/en/latest/topics/add_apis.html