【问题标题】:SAML with ADFS for angularjs+java+jetty webapp用于 angularjs+java+jetty webapp 的 SAML 和 ADFS
【发布时间】:2018-12-28 11:09:01
【问题描述】:

我正在开发一个 web 应用程序,前端是在 AngularJS 中实现的,它通过调用 REST API 与后端服务器通信。后端是使用部署在 Jetty 中的 reslet framework 实现的 Java REST 服务器。

目前,当用户登录 Web 应用程序时,会调用一个 REST API,然后该 API 会转到 Java REST 服务器。然后服务器对用户进行身份验证。

我想使用 SAML 实现 SSO。因此,当企业用户尝试登录应用程序时,必须将用户重定向到 ADFS。如果用户成功通过身份验证,则必须允许他登录到应用程序。

我想知道如何开始?我见过 sam2-js 库,但它似乎是用于基于 NodeJS 的服务器。我不太确定它是否可以在前端与 AngularJS 一起使用。

【问题讨论】:

  • “我从哪里开始...”风格的问题往往过于宽泛,很难回答。但是,可以肯定的一件事是,您在这里专注于错误的地方。这根本不是 angularjs 可以负责的。您的身份验证正在 Jetty 中处理,因此它应该负责确定用户是否可以通过 SAML 访问。 Angularjs 根本不应该关心用户是谁或他们需要如何进行身份验证。
  • 感谢您指出正确的方向。你认为 pac4j 或 keycloak 是一个不错的选择吗?
  • @claies 您会分享您对以下答案的看法吗?
  • 感觉这只是暴露了一点,整个过程需要更加充实一点。用户当前如何在没有 SAML 的情况下登录 REST API?我看不出“Jetty is Irrelevant”有多重要,因为它是 SAML 流程中的关键部分。
  • 典型的 SAML 流程如下: 1) 用户使用 Intranet 上的链接访问远程应用程序(您的 Jetty 实例)。 2) 应用程序识别用户的来源并将用户重定向回身份提供者(您的 ADFS)。 3) 身份提供者以包含用户用户名或电子邮件地址的 XML 文档的形式构建身份验证响应,使用 X.509 证书对其进行签名,并将此信息发布到应用程序。 4) 已经知道身份提供者的应用程序检索身份验证响应并对其进行验证。

标签: angularjs rest jetty saml-2.0 restlet


【解决方案1】:

使用 SAML 的 SSO 涉及浏览器重定向,因此流程在 angular 和 ADFS 之间。

没有 Java 后端。

所以码头是无关紧要的。

SSO 与 REST 无关。它们是两种不同的流程,以两种不同的方式处理。

SAML 不是适用于 Angular 的 SSO 协议。这就是为什么你找不到任何例子。

您需要将 OpenID Connect 与 ADFS 4.0 一起使用。 ADAL 是要走的路。

【讨论】:

  • 我有点困惑,为什么 Jetty 不相关。我的后端是使用 Restlet 框架在 Java 中实现的。
  • SSO 是基于用户的,介于浏览器或设备与 IDP 之间。此结果是访问令牌(如果使用 OIDC)。可以将访问令牌传递给 API 以进行身份​​验证。但 API 流不是 SSO。
  • 好的。你能帮我理解为什么 SAML 不适合 Angular JS 吗?出于非技术原因,我被要求尝试使用 SAML 实施 SSO。
  • 我所知道的唯一 SAML js 实现是 Passport (node.js)。 SAML 在密码学上很重,作为 js 和客户端保持密钥安全是有问题的。 XML SAML 令牌也不能用作 API JWT 令牌。使用 OIDC。它更简单并生成 JWT 访问令牌。
  • SAML 如今主要用于企业,即公司对公司。它有一个 SSO 配置文件,但实际上并没有适合本机的配置文件,即移动设备、桌面、命令行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2012-03-17
相关资源
最近更新 更多