使用自定义标头重定向到外部网站 - AngularJS / OAuth

时间:2015-07-29 23:08:52

标签: javascript angularjs spring-security oauth-2.0

使用自定义标头重定向到外部网站(OAuth服务器)是否有意义,以便对用户进行身份验证?

例如,在向[{1}}提供凭据后,您点击登录,然后将您重定向到外部地址http//this_is_my_site/login以授权您的客户。

问题是http://OAuth_Server/oauth/autorize需要您在http://OAuth_Server/oauth/autorize中输入的相同凭据。

如何使用自定义标头重定向到OAuth服务器,或者这是一种不好的方法?

http//this_is_my_site/login

我使用AngularJS作为前端,使用Spring作为支持。

1 个答案:

答案 0 :(得分:2)

你的问题有两个方面。

首先是实施OAuth。基本上,您将客户端重定向到另一端,但重定向具有到您的站点的反向链接。当客户端在另一个站点上进行身份验证(登录)时,服务器会将客户端重定向回您的站点(使用您的站点在第一次重定向中提供的URL)并为您的站点提供TOKEN(在GET参数中)。使用此令牌,您可以将请求发送到另一个站点并检查用户是否正常。

我已经缩短了一些步骤,但从总体上看,这就是它。

在您的情况下,即使用户似乎拥有相同的凭据,重要的是他仍需要在提供商上进行身份验证(授权您的网站)。没有办法解决这个问题,因为它是故意设计的,客户端无法输入您网站上其他网站的凭据,仍然可以访问其他网站的数据。

其次,在重定向时将自定义标头发送到另一个站点。这不可能主要是因为它是一个历史限制。最初通过使用新URL向客户端发送FLUSH PRIVILEGES标头并且客户端通过GET请求新资源来进行重定向。就如此容易。后来AFAIK添加了JavaScript重定向,没有人真正关心标题,因为它无论如何都不可能,所以为什么要这么麻烦呢?

但是,此规则有一个重要的例外 - 身份验证。您可以在URL中将用户和密码添加为Location,它们将在Authenticate标头中发送。但是,它与OAuth没有任何共同之处,称为HTT基本身份验证。如果服务器支持它,您可以在重定向期间指定它们,但它与OAuth正交。