【问题标题】:AssertionUrl for AngularJS ApplicationAngularJS 应用程序的 AssertionUrl
【发布时间】:2021-03-25 08:39:10
【问题描述】:

我的申请流程是这样的,

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

问题从这里开始,

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

在 MVC 和 Web 表单的情况下,这很简单,但在 AngularJS/Angular SPA 的情况下应该怎么做呢?

编辑 1:

登录流程

SPA -> API -> SPA -> Idp

(SPA调用API,API生成SAML请求返回给SPA,SPA再重定向到Idp)

断言流程

Idp -> API ?水疗

(Idp 调用 API 中的 AssertionUrl,API 生成 JWT 但如何发送到 SPA?)

【问题讨论】:

    标签: angularjs asp.net-web-api itfoxtec-identity-saml2


    【解决方案1】:

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

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

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

    您可以使用 ITfoxtec.Identity 包创建 JWT 访问令牌。通过调用JwtHandler.CreateToken方法https://github.com/ITfoxtec/ITfoxtec.Identity/blob/master/src/Tokens/JwtHandler.cs#L38。

    编辑 1

    SPA、IdP 和 API 之间的所有通信要么重定向,要么通过客户端浏览器发布。

    在断言流程中成功验证后。 API 可以使用 URL 中的查询或片段中的访问令牌重定向到 SPA

    【讨论】:

    • 是的,目的是创建 JWT 令牌并使用它。但是 API 和 Idp 上的 AssertionUrl 在成功登录时调用它。 API 将创建 JWT 令牌,但 SPA 将如何接收令牌?请参阅问题中的编辑 1,非常感谢您的帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多