【问题标题】:Redirect to an external site with custom headers - AngularJS/OAuth使用自定义标头重定向到外部站点 - AngularJS/OAuth
【发布时间】:2015-10-21 03:43:45
【问题描述】:

使用自定义标头重定向到外部站点(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 错误。您应该只在授权主机上输入凭据
  • hmm,我很难真正理解如何将 OAuth2 与现有应用程序集成......所以你说登录页面应该托管在 http://OAuth_Server 而不是 @987654328 @网站?

标签: javascript angularjs spring-security oauth-2.0


【解决方案1】:

你的问题有两个方面。

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

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

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

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

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

【讨论】:

  • 哇!现在很清楚了。登录(授权)应始终在 UAA 服务器中,而不是在客户端中。
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多