繁体   English   中英

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

[英]Redirect to an external site with custom headers - AngularJS/OAuth

使用自定义标头重定向到外部站点(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用于后端。

您的问题有两个方面。

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

我已经简化了一些步骤,但总的来说就是这样。

在您的情况下,即使用户似乎具有相同的凭据,也仍然需要在提供者上进行身份验证(授权您的网站),这一点很重要。 没有办法解决此问题,因为它是经过有意设计的,因此客户端不应能够输入您站点上另一个站点的凭据,而仍然可以访问其他站点的数据。

其次,是在重定向时将自定义标头发送到另一个站点。 不可能主要是因为它是历史限制。 最初,重定向是通过使用新的URL向客户端发送Location标头来实现的,并且客户端通过GET请求新资源。 就如此容易。 后来JavaScript重定向是由AFAIK添加的,没有人真正在乎标头,因为无论如何还是不可能的,那么为什么要打扰呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM