我们有一个API,Oauth2提供程序。
从AngularJS客户端应用程序中,我如何实现对此api的身份验证流程,以获取将来请求的访问 token ?
我要搜索的是为此的“隐式补助金”流程。
我会提供一个
{
client-id: "abcdefghijklmnopqrstuvqxyz0123456789",
redirect_url: "http:localhost:8080/provider_cb",
response_type: "token"
}
我在后端和用于Oauth2的门卫/设计中有Rails REST API。
我遇到了angular-oauth,它似乎在一定程度上解决了该问题。
但,
现在,
Q1。我不明白的是整个过程是如何开始的,我无法发出任何$ http请求,但返回的是SignIn HTML页面。我应该使用$ location服务重定向到登录页面吗?还是应该链接到/oauth/authorize的整个GET请求?...
Q2,如何在登录后捕获重定向以提取出access_token?
Q3。是否知道任何处理Oauth2身份验证的服务或执行此操作的标准Angular方法?
最佳答案
让我们尝试回答您的三个问题:
Q1 ),您应该基本了解常规的OAuth2流程。您正在查看的不是特定于AngularJS的实现。如果您不希望使用用于授权的弹出窗口,则必须花点时间才能使redirect_url/state回来后正常工作(如果您想使用#state-保存-否则只需指定您的条目-redirect_uri中的网址)。您不应使用$ http进行重定向,因为这仅用于XHR和类似的调用。要将您的用户带到登录页面,只需执行
$ window.location.href ='http://yourlogin.com/oauthloginpage';
然后,您的应用程序将重定向到登录页面-不要忘记您的redirect_url参数。如果需要,还可以在请求中指定其他参数,例如“scope”/“state”。
Q2 )重定向后的登录将重定向到您在redirect_url中指定的uri。然后它会提出类似http://myapp.com/#access_token=foobar&refresh_token=foobar2&state=loremipsem的东西
只需使用以下代码从 Angular 抓取零件:
var currentURL = $location.absUrl();
var paramPartOfURL = currentURL.slice(currentURL.indexOf('#') + 1);
然后将paramPart解析为带有split('&')的数组,并通过查找“键” access_token进行遍历,然后-瞧-您已经准备好将access_token放入本地存储/服务/cookie中。
您可能会使用其他实现将URL分成多个部分-也许会有更好的实现,但这将是“捷径”。
解析之后,您可以通过正常的$ location.path(....)调用将用户再次重定向到正确的状态,并消除OAuth2的#参数。
Q3 )如果您想以某种方式映射AngularJS-app的源状态/路由-如果OAuth2-Server实现了state参数,请尝试滥用state参数。这将在请求响应后保留下来。
对于非弹出式实现,我目前不知道任何其他模块。
处理OAuth2内容的另一种方法是自己实现登录页面,然后与与oauth2提供程序进行交互,从而对使用Basic Auth或其他方法的其余调用使用react。然后,您可能可以使用$ http调用。
关于ruby-on-rails - AngularJS和对Oauth2提供程序的身份验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20947183/