使用Ajax进行OAuth2隐式授权

时间:2016-02-14 16:22:20

标签: javascript angularjs ajax oauth

我正在使用Angular在Javascript应用程序中实现OAuth的隐式授权类型。我想使用AJAX请求请求令牌。当我向OAuth服务器发出请求时,它会使用302location标头进行响应。根据规范,该位置是我配置的重定向URL,其中包含一个包含访问令牌的哈希片段。

我的问题是,如果它是ajax请求,我无法读取散列片段,因为XmlHttpRequest会自动跟随位置标头。我似乎无法获得有关初始响应的任何信息(状态为302的那个,并且具有位置标头。)如果有某种方法来拦截该响应并读出位置标题,我会设定。

我想请求令牌在幕后发生,而用户不知道它正在发生。 (也就是说,没有浏览器的URL跳转。)我还应该提到我在SSO可用的环境中工作,并且用户很可能已经通过SSO进行了身份验证。只要我的OAuth服务器检测到SSO cookie,它就会知道用户之前已经过身份验证,并且只需为此应用程序发出令牌,而无需重定向到登录页面。

有没有办法读取第一个响应的位置标头,或者读取重定向到的URL?似乎xhr本身竭尽全力阻止这种情况,所以我也想知道是什么原因造成的?

1 个答案:

答案 0 :(得分:0)

oauth Implicit Grant通常会打开服务登录窗口,以便用户可以接受服务集成商,然后提供他们的登录凭据。使用JavaScript,您可以通过实现类似于以下的代码来读取哈希:

var browserRef = window.open(add your URL here, '_blank','location=yes,clearsessioncache=yes,clearcache=yes');
browserRef.addEventListener ('loadstart', function(event) { add code to read the hash)}