AngularJS 应用程序的 AssertionUrl

AssertionUrl for AngularJS Application

我的申请流程是,

  1. 用户进入 Url 并显示 AngularJS 登录页面
  2. 用户单击“使用 SAML 登录”并调用 Web API 端点,returns SAML 登录 URL
  3. AngularJS UI 接收 SAML 登录 URL 并将用户重定向到 Idp 登录屏幕
  4. 用户通过 Idp 进行身份验证并且 Idp 调用断言Url

问题从这里开始,

  1. 如果我在 Web API 上创建断言 Url 并验证请求,那么 AngularJS UI 如何知道登录成功与否?

在 MVC 和 Web Forms 的情况下,它非常简单,但是在 AngularJS/Angular SPA 的情况下应该做什么?

编辑 1:

登录流程

SPA -> API -> SPA -> Idp

(SPA 调用 API,API 生成 SAML 请求并 Returns 它到 SPA,然后 SPA 被重定向到 Idp)

断言流程

Idp -> API ? SPA

(Idp 在 API 中调用断言 Url 并且 API 生成 JWT 但它将如何发送到 SPA?)

在 AngularJS/Angular SPA 中,您有两种可能的解决方案来处理成功 SAML 2.0 身份验证后的后续用户会话。

  1. 像 ASP.NET MVC 一样使用 cookie。您必须限制 cookie 以使其在 SPA 中安全。它要求您的 API 和 SPA 在同一个域中。

  2. 登录成功后创建JWT访问令牌。它被交给 SPA 并在后端 API 代码中的每个 API 调用中进行验证。

您可以使用 ITfoxtec.Identity package. By calling the JwtHandler.CreateToken method https://github.com/ITfoxtec/ITfoxtec.Identity/blob/master/src/Tokens/JwtHandler.cs#L38 创建 JWT 访问令牌。

编辑 1

SPA、IdP 和 API 之间的所有通信都是重定向或 post 通过客户端浏览器。

在断言流程中成功验证后。 API 可以使用查询中的访问令牌或 URL

中的片段重定向到 SPA

在Angular中创建一个组件(Token组件)并为其创建一个路由(如/token)。该路线应采用 /token/{token_id} 之类的路线参数。令牌组件从路由参数中获取令牌值并保存在 session 存储中。在所有 api 调用之前,angular 拦截器将从 session 存储中获取令牌值并添加为 header