我的申请流程是这样的,
- 用户输入 Url,然后显示 AngularJS 登录页面
- 用户单击“使用 SAML 登录”并调用返回 SAML 登录 URL 的 Web API 端点
- AngularJS UI 接收 SAML 登录 URL 并将用户重定向到 Idp 登录屏幕
- 用户通过 Idp 进行身份验证,并且 Idp 调用 AssertionUrl
问题从这里开始,
- 如果我在 Web API 上创建断言 URL 并验证请求,那么 AngularJS UI 如何知道登录是否成功?
对于 MVC 和 Web 表单,这非常简单,但是对于 AngularJS/Angular SPA 应该做什么?
Edit 1:
登录流程
SPA -> API -> SPA -> Idp
(SPA调用API,API生成SAML请求并将其返回给SPA,SPA然后重定向到Idp)
断言流程
Idp -> API ?温泉
(Idp 调用 API 中的 AssertionUrl,API 生成 JWT,但如何将其发送到 SPA?)
在 AngularJS/Angular SPA 中,您有两种可能的解决方案来处理成功 SAML 2.0 身份验证后的后续用户会话。
-
像 ASP.NET MVC 中一样使用 cookie。您必须限制 cookie 以确保其在 SPA 中的安全。它要求您的 API 和 SPA 位于同一域中。
-
成功登录后创建 JWT 访问令牌。它被交给 SPA 并在后端 API 代码中的每个 API 调用中进行验证。
您可以使用以下命令创建 JWT 访问令牌ITfoxtec.身份包裹。通过致电JwtHandler.CreateToken
method https://github.com/ITfoxtec/ITfoxtec.Identity/blob/master/src/Tokens/JwtHandler.cs#L38.
Edit 1
SPA、IdP 和 API 之间的所有通信都是通过客户端浏览器重定向或发布。
在断言流程中成功进行身份验证后。 API 可以使用查询中的访问令牌或 URL 中的片段重定向到 SPA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)