当前位置: 首页 > 知识库问答 >
问题:

使用Google oAuth 2.0无记名令牌进行Azure应用服务身份验证

翟默
2023-03-14

我们使用应用服务身份验证来保护网络 API,并使用 Google 作为身份验证提供程序。当我们从浏览器触发请求时(当会话信息在cookie中时),它按预期工作

IIS日志:

2016-05-29T13:51:19 PID[3600]详细接收请求:GEThttps://XXXXXX.azurewebsites.net/api/user2016-05-29T13:51:19 PID[3600]详细找到站点“XXXXXX.azurewebsites.net”的“AppServiceAuth会话”cookie。长度:728。2016-05-29T13:51:19 PID[3600]详细认证XXXXXX@gmail.com成功使用“会话Cookie”身份验证。

但是,当我们使用API测试工具(如Postman)并使用持有者令牌设置授权标头时,它总是会导致重定向。

IIS日志:

2016-05-29T13:53:38 PID[3600]收到的详细请求:POST https://XXXXX.azurewebsites.net/api/user 2016-05-29t 13:53:38 PID[3600]信息重定向:https://accounts.google.com/o/oauth2/v2/auth?响应类型=代码

我们还尝试使用相同的持有者令牌设置 X-ZUMO-AUTH 标头,但我们看到错误,因为令牌不是预期的格式。显然,它需要编码的JWT令牌。

IIS日志:

016-05-29T13:51:52 PID[3600]收到的详细请求:POST https://XXXXXX.azurewebsites.net/api/user 2016-05-29t 13:51:52 PID[3600]警告JWT验证失败:IDX10708:'系统。“identity model . tokens . jwtsecuritytokenhandler”无法读取此字符串:“Bearer ya29。XXXXXXXXXX _ RDrX _ zsuvmx 49 e _ 9 QS 5 ecz 9 f1 yhde 5j 4h 9 grn 6 opkjlxvn 1 ijzjhxa _ Q '。该字符串需要采用紧凑的JSON格式,其形式为:“..”..2016-05-29T13:51:52信息重定向:https://accounts.google.com/o/oauth2/v2/auth?响应类型=代码

注意:从谷歌获得的不记名令牌是有效的,因为我们可以通过打电话到https://www.googleapis.com/oauth2/v3/tokeninfo?核实细节访问令牌=[令牌]

请建议。

共有2个答案

陆英毅
2023-03-14

>

  • 从应用服务门户打开身份验证/授权

    浏览到需要身份验证的Web应用程序或API,您将被重定向到google登录页面,当您身份验证成功时,响应将包含:

    • "id_token":这个令牌可以从响应中提取,或者通过访问令牌存储 /.auth/me
    • "redirect_uri"此标记将包含在响应正文中,您也可以在以下步骤中静态设置它,因为这是回调URL,除非您从google控制台更改它,否则它不应该更改

    使用以下 JSON 有效负载 {“redirect_uri”:“”id_token“:”}“}向 https://{主机名}/.身份验证/登录/谷歌发出请求。成功的响应将包含“身份验证令牌”存储此令牌或缓存它

    对需要身份验证的 API 的后续请求应包含 HTTP 请求标头:

    “x-zumo-auth”值为“AuthenitActionToken”

    奖励:为了验证您的令牌,您可以使用以下JSON付费负载{"id_token":""}, 响应应指定令牌是否有效

  • 傅边浩
    2023-03-14

    您使用的 Google 令牌是访问令牌,而不是持有者令牌。它可用于访问 Google 资源,但不能用于通过您的网络 API 进行身份验证。

    我无法找到关于此的好文档,但我可以告诉您它在这里起作用:

    1. 在您的客户端应用程序中,您必须从Google获取id_token和授权码。当用户使用Google OpenID Connect登录时,您通常会收到此信息。我假设您已经知道如何执行此操作,因为您已经知道如何获取访问令牌。
    2. https://{host name}/. auth/login/google发送一个POST请求,其JSON有效负载如下所示{"authorization_code":"

     类似资料:
    • 使用 的请求可用于身份验证吗? 或者 我们应该使用另一种方法来验证客户端并颁发令牌,然后像OAuth2一样将令牌用作不记名令牌吗?为什么流行的Web服务(例如Github、AWS、Google…)使用其他方法(如AWS所做的:)来验证客户端。问题的重点是:以下流程中是否存在任何可值或违反标准的行为。 我想使用以下流程: :类似于Twitter客户端。 :类似于Twitter API。 < li >

    • 我很难让刷新令牌在Azure App Service中使用移动应用程序为某些身份验证提供商工作。CGillum就此写了一篇很棒的文章(http://cgillum.tech/2016/03/07/app-service-token-store/ ),在这篇文章之后,我发现刷新方法对微软账户很有效,但我很难刷新脸书和谷歌的访问令牌。我们的应用程序(Xamarin Forms)使用微软账户、谷歌和脸书

    • 除了用户名和密码(例如来自ACS的令牌)之外,是否还有其他使用AMQP对Azure服务总线进行授权的方法? 在我的场景中,我希望能够在不公开凭据的情况下为资源级客户端提供对服务总线的访问权限。

    • 致命:“https://github.com/scuzzlebuzzle/ol3-1.git/'”身份验证失败

    • 问题内容: 在使用Java EE 6的Web应用程序上,我想将某些功能作为Json Rest Service公开。我想使用身份验证令牌进行登录,用户将发送其用户名,密码,服务器将发送回令牌,该令牌将用于授权用户在给定时间内的进一步请求。 到目前为止,有几个问题困扰着我; 当服务器创建令牌并将其发送给客户端时,服务器是否应该使用像哈希表这样的东西作为用户ID令牌对将其保存在DB或Bean中? 我可以

    • 我正在尝试为我的应用程序构建一个身份验证解决方案。我使用React作为前端,使用API模式下的Rails作为后端。我有一个外部身份验证解决方案,我需要使用它。我无意中发现了Knock for JWT令牌管理,但我不理解文档,尤其是这部分“它必须有一个身份验证方法,类似于has_secure_password添加的方法”,因为由于我的外部身份验证服务,我没有用户模型。因此,在我的头脑中,登录请求将发