如何将SAML登录与REST API + SPA应用程序一起使用?

时间:2019-05-01 03:56:52

标签: rest saml

我想对具有REST API的单个Web应用程序使用SAML登录。我应该怎么做?通常,以OAuth为例,我们以Google / Firebase为例:

  • SPA呼叫Google进行登录。 Google返回Google ID令牌
  • SPA可以使用Google ID令牌调用服务器,该服务器可以通过Google验证并返回用于应用程序的访问令牌

首先这是正确的还是到目前为止我做错了什么?


但是使用SAML,据我所知,它的用户被重定向到SAML IDP,然后SAML IDP将用户重定向到服务器断言URL。由于存在此重定向,如何在REST上下文中使用它?我不熟悉SAML,但没有看到令牌。服务器只是获得用户信息的“断言”?

2 个答案:

答案 0 :(得分:0)

以下是应用程序使用SAML进行身份验证时发生的事件序列:

1)服务器应使用SAML IDP的URL向客户端发送响应。 2)客户端应用程序将浏览器重定向到SAML IDP(1)。 3)成功通过身份验证后,SAML服务器将带有重定向的响应发送回客户端。浏览器会自动将HTML表单SAML服务器发布到您的服务器。 4)在验证SAML断言和成功的授权之后(您可以使用用户的信息或其他属性来授权用户使用您的应用程序),您的服务器应生成一个令牌,该令牌现在可供客户端应用程序使用。

这是一个基本方案。

在此处查看spirng-saml项目,您可以尝试使用示例Web应用程序。 https://projects.spring.io/spring-security-saml

答案 1 :(得分:0)

SAML声明与Google使用的OpenID Connect 1.0中的id_token等效。 SAML中没有access_token。 SAML是一种身份验证协议。

使用access_tokens的

OAuth 2.0是授权协议。因此,它提供了access_token来授权对REST API的访问。

OpenID Connect是OAuth 2.0的扩展,除了API授权外还支持用户身份验证,并引入了包含用户信息的id_token。

在具有REST API的单页应用程序中使用SAML的选项之一是将它们托管在同一域中。在这种情况下,您可以:

  1. 从SAML身份提供商获取断言。
  2. 在服务器端验证它(格式,签名,生存期等)。
  3. 在响应中返回会话cookie,以在浏览器中进行设置。
  4. 每个对REST API的请求都将带有一个会话cookie,以授权对其进行访问。