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

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

使用自定义 headers 重定向到外部站点(OAuth 服务器)以验证用户是否有意义?

例如,在向 http//this_is_my_site/login 提供凭据后,您单击登录,然后将您重定向到外部地址 http://OAuth_Server/oauth/autorize 以授权您的客户端。

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

如何使用自定义 headers 重定向到 OAuth 服务器,或者这是一种糟糕的方法吗?

headers: {
  Authorization: "Basic " + btoa('user' + ":" + 'password')
}

我在前端使用 AngularJS,在后台使用 Spring。

你的问题有两个方面。

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

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

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

其次,在重定向时将自定义 header 发送到另一个站点。它不是 possible 主要是因为它是一个历史限制。最初,重定向是通过使用新 URL 向客户端发送 Location header 发生的,并且客户端通过 GET 请求新资源。就如此容易。后来 AFAIK 添加了 JavaScript 重定向,没有人真正关心 headers 因为它不是 possible 无论如何为什么要麻烦?

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