【发布时间】:2017-12-14 00:45:30
【问题描述】:
我正在尝试将 WSFederation 身份验证提供程序添加到 IdentityServer4。 最近Microsoft.AspNetCore.Authentication.WsFederation Preview 2 发布了,我可以将它添加到普通的 Asp.NetCore-Application 中。
但我很难将其添加到IdentityServer4 EntityFramework-Quickstart-Example。
这就是我在 Startup.cs/ConfigureServices-method 中添加 AuthenticationProvider 的方式:
services.AddAuthentication()
.AddWsFederation("WsFederation", options =>
{
options.Wtrealm = realm;
options.MetadataAddress = metadata;
})
我在前端得到了 WSFederation 的按钮,我也可以登录。但是在回调之后我得到了这个错误:
InvalidOperationException:缺少子声明 IdentityServer4.Hosting.IdentityServerAuthenticationService.AssertRequiredClaims(ClaimsPrincipal 校长)
我可以理解这是从哪里来的,它是 IdentityServer4 的 IdentityServerAuthenticationService.cs 中的 this line,它需要一个“子”声明 - WSFed 不会返回这样的声明:
if (principal.FindFirst(JwtClaimTypes.Subject) == null) throw new InvalidOperationException("sub claim is missing");
据我所知,我无法配置此声明,尽管 quickstart-project 中有一些表似乎可以用于此,尤其是那些 2:
我已经尝试将我想要使用的声明而不是主题声明添加到表中,但它似乎没有任何影响,我也不知道数据库如何映射到我添加的身份提供者在代码中。我很乐意提供有关后续步骤的任何提示,或者如果您知道任何示例,那就更好了。
P.S.:关于这个主题已经有一些问题,但它们要么来自 WSFederation 的 .Net Core 实现可用之前,要么参考 WSFederation 服务器的示例,而不是客户端。
【问题讨论】:
-
我只是想实现类似自定义 Authenticationprovider 的想法,它扩展 WSFederation-authentication 以将 WSFed 声明(如 upn)转换为 IdentityProvider 兼容声明(如“sub”) - 但我我不确定这是否是最优雅的方式。尝试通过逐步浏览源代码和阅读文档来了解更多信息。
标签: c# asp.net-core .net-core identityserver4 ws-federation