【发布时间】: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