在对IdentityServer4 Quickstart 示例解决方案(特别是 8_AspNetIdentity 示例)进行一些调整后,我遇到了一些问题。
我会先说我不确定我正在尝试做的事情是否不受支持,或者我做错了。
此示例解决方案包含与我的问题相关的以下项目:
一个身份服务器,
一个使用 OpenIdConnect 对其用户进行身份验证的 MVC 客户端(名为 MVCClient),
对其用户使用不记名身份验证的 Web API 客户端(名为 API)
设计为 API 客户端的控制台应用程序(名为 ResourceOwnerClient)
我正在尝试做的是将 API 项目合并到 MVCClient 中,以便 MVCClient 既可以使用 OIDC 对来自其 MVC 网站的用户进行身份验证,也可以使用承载身份验证对 ResourceOwnerClient 进行身份验证。
我对 MVCClient 的 Startup.cs 进行了以下更改:
改为services.AddMvc();:
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder(new[]
{
JwtBearerDefaults.AuthenticationScheme,
CookieAuthenticationDefaults.AuthenticationScheme,
"oidc"
})
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
将 JWT 不记名选项添加到services.AddAuthentication():
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api1";
})
现在从技术上讲,这确实有效,因为 ResourceOwnerClient 和 MVC 用户都可以成功地通过 MVCClient 进行身份验证。然而,我有一个警告:
当我从 MVC 端对用户进行身份验证时,我注意到我当前的用户中有两个身份。两者在声明等方面都是相同的。这只发生在我在 MVCClient 中设置断点时,在 IdentityServer 上只有一个身份。
在 IdentityServer 上,我注册了一个 UserClaimsPrincipalFactory,它将我自己的自定义声明添加到 ClaimsIdentity。在 IdentityServer 上的两个身份中,我可以看到重复的声明。因此,我看到的不是一个身份和两个自定义声明,而是两个身份,每个身份都有 4 个自定义声明。我的 UserClaimsPrincipalFactory 中的 CreateAsync 方法也被单次登录击中 5 次。
虽然这种行为很奇怪,但它似乎没有任何负面影响。但这只是我正在构建的更大应用程序的概念证明,我担心我将来可能会因此遇到问题。
如果有人以前尝试过这种事情,或者知道为什么会发生这种行为,我们将不胜感激。
素胚勾勒不出你
相关分类