gpt4 book ai didi

ruby-on-rails - AngularJS 和对 Oauth2 提供者的身份验证?

转载 作者:行者123 更新时间:2023-12-04 14:59:13 24 4
gpt4 key购买 nike

我们有一个 API,Oauth2 Provider。

从 AngularJS 客户端应用程序中,我如何实现到此 api 的身份验证流程以获取 future 请求的访问 token ?

我正在寻找的是一个隐式授予流程。

我会提供一个

{
client-id: "abcdefghijklmnopqrstuvqxyz0123456789",
redirect_url: "http:localhost:8080/provider_cb",
response_type: "token"
}

我在后端和门卫/设计中有一个 Rails REST API 用于 Oauth2 配置。

我遇到了 angular-oauth ,这似乎在一定程度上解决了问题。
但,
  • 我不希望提供 token 验证功能(这是强制性的)
  • 我不希望为登录打开一个新窗口弹出窗口(希望在同一窗口中进行重定向)

  • 现在,

    Q1。我不明白的是整个过程是如何开始的,我无法发出任何 $http 请求,这会返回一个 SignIn HTML 页面。我应该使用 $location 服务将其重定向到登录页面吗?或者我应该有一个指向/oauth/authorize 的整个 GET 请求的链接?...

    Q2,我如何在SignIn之后捕获重定向以提取access_token?

    Q3。知道任何负责 Oauth2 身份验证或标准 Angular 方式的服务吗?

    最佳答案

    让我们尝试回答您的三个问题:

    第一季度 ) 你应该基本了解一般的OAuth2流程。它不是您正在查看的特定于 AngularJS 的实现。如果您不想使用弹出窗口进行授权,则必须花点功夫才能让 redirect_url/state 在返回后正常工作(如果您想要#state - 保存 - 否则只需指定您的条目 - redirect_uri 中的 url)。您不应该使用 $http 进行重定向,因为这仅适用于 XHR 和类似的调用有用。要让您的用户进入登录页面,只需执行
    $window.location.href = ' http://yourlogin.com/oauthloginpage ';

    然后,您的应用将重定向到登录页面 - 不要忘记 redirect_url 的参数。如果需要,还可以在请求中指定其他参数,例如“范围”/“状态”。

    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);

    然后使用 split('&') 将 paramPart 解析为一个数组,并通过查找“ key ”access_token 来遍历它,并且 - 瞧 - 您的 access_token 已准备好被带入您的本地存储/服务/cookie。

    您可能会使用其他实现来将 URL 拆分为多个部分 - 也许有更好的实现,但这将是“快速拍摄”。
    解析后,您可以通过正常的 $location.path(....) 调用再次将用户重定向到正确的状态,并消除 OAuth2 的 # 参数。

    第三季度 ) 如果您想有一种映射 AngularJS 应用程序的源状态/路由的方法 - 如果您的 OAuth2-Server 实现它,请尝试滥用 state 参数。这将在请求 <-> 响应中继续存在。
    对于非弹出式实现,我目前不知道任何其他模块。

    使用 OAuth2 的另一种方法是自己实现登录页面,然后只需与 oauth2 提供程序交互,该提供程序使用 Basic Auth 或其他方法对 rest 调用使用react。然后你可能可以使用 $http 调用。

    关于ruby-on-rails - AngularJS 和对 Oauth2 提供者的身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947183/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com