ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现

Posted

技术标签:

【中文标题】ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现【英文标题】:ID4 ADFS 3.0 and oidc-client (vue spa) - Callback implementation 【发布时间】:2020-07-19 18:46:12 【问题描述】:

要在我们的 SPA 中添加 ADFS 3.0 身份验证,我们使用 javascript sample 和一个(wsfed)external identityprovider,我们还为 SPA 客户端添加了一个 local api

我们还在登录过程中添加了一个自定义视图,用户可以在其中“选择 WorkingContext”,我们可以设置一个额外的声明。

问题:如何添加和检索附加声明?

由于我们只需要 ws federation 的一些声明,我们制作了一个超级简单的callback,我们只需执行以下操作(我正在回答questions from the docs)

处理回调并登录用户

    检查外部提供者返回的身份。 是的,我们从 wsfed 收到了正确的声明 决定如何与该用户打交道。这可能会有所不同,具体取决于这是新用户还是老用户。新用户在被允许之前可能需要额外的步骤和 UI 在。 无需额外步骤 可能会创建一个链接到外部提供商的新内部用户帐户。 不,我们不需要用户,我们只需要来自 wsfed 的几个声明,所以我们只返回一个基于 FindUserFromExternalProvider 中的 wsfed 子的 TestUser 存储要保留的外部声明。 我们是否需要存储声明,声明不会嵌入到 jwt 令牌中,而令牌只是经过验证? 删除临时cookie 好的 登录用户 在这里,我们想显示一个自定义 UI,用户应在其中选择“workingcontext”,我们可以添加“workingcontext”作为附加声明。

假设上述内容有效,我们如何在第 6 步中添加额外声明?

await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.SubjectId, user.Username, true, context?.ClientId)); 似乎没有提供任何添加声明的方法。

这是我们尝试通过登录过程传递附加声明的方式:

    var isuser = new IdentityServerUser(user.SubjectId)
            
                DisplayName = user.Username,
                IdentityProvider = provider,
                AdditionalClaims = additionalLocalClaims
            ;


            await HttpContext.SignInAsync(isuser, localSignInProps);

【问题讨论】:

【参考方案1】:

我们只需要实现IProfileService,仅此而已。

【讨论】:

以上是关于ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现的主要内容,如果未能解决你的问题,请参考以下文章

SAML 2 和 ADFS 3.0 IDP - SSO 无效状态代码首次登录 - 但之后每次都成功

Spring Security SAML Extension 将 ADFS 3.0 与其他声明提供程序集成

未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份

配置 ADFS 3.0 / SAML 2.0 以使用 Spring Security 进行 SSO 集成

ADFS 3.0 和非声明感知应用程序、身份验证问题

Office 365 身份验证和单一登录部署