对具有自定义头的外部站点(OAuth服务器)进行重定向以便对用户进行身份验证是否合理?
例如,在向http//this_is_my_site/login
提供凭据之后,单击登录,并将您重定向到外部地址http://OAuth_Server/oauth/autorize
以授权您的客户端。
问题是,http://OAuth_Server/oauth/autorize
需要与您刚才在http//this_is_my_site/login
中输入的凭据相同。
如何使用自定义头重定向到OAuth服务器,或者这是一种糟糕的方法?
headers: {
Authorization: "Basic " + btoa('user' + ":" + 'password')
}
我将AngularJS用于前端,Spring用于后台。
发布于 2015-07-30 00:27:23
你的问题有两个方面。
首先是实现OAuth。基本上,您重定向客户端到另一边,但重定向有反向链接到您的网站。当客户端在另一个站点上进行身份验证(登录)时,服务器将客户端重定向回您的站点(使用在第一次重定向中提供的url站点)并提供站点令牌(在GET参数中)。使用此标记,您可以向另一个站点发送请求,并检查用户os是否确定。
我已经缩短了一些步骤,但总的来说,就是这样。
在您的情况下,即使用户似乎具有相同的凭据,他仍然需要在提供者上进行身份验证(授权您的站点)是很重要的。没有办法解决这个问题,因为它是故意设计的,客户端不应该能够在您的站点上输入另一个站点的凭据,并且仍然可以访问其他站点的数据。
第二,在重定向时将自定义标头发送到另一个站点。这是不可能的,主要是因为这是一个历史的局限。最初,重定向是通过向具有新URL的客户端发送Location
头来实现的,客户端通过GET请求新的资源。就这么简单。后来,AFAIK添加了JavaScript重定向,没有人真正关心头部,因为它是不可能的,所以为什么要麻烦呢?
然而,对于此规则有一个重要的例外-身份验证。您可以将用户和密码作为http://user:password@host/...
添加到URL中,它们将被发送到身份验证头中。但是,它与OAuth没有任何共同之处,称为。如果服务器支持它,您可以在重定向期间指定它们,但它与OAuth是正交的。
https://stackoverflow.com/questions/31712670
复制相似问题