首页 > 其他分享 >OAuth2

OAuth2

时间:2023-11-17 17:01:42浏览次数:31  
标签:OAuth2 16 谷歌 auth google https com

参考:

 

为了对 OAuth2 有一个直观的认识。我们先从一个例子开始。

谷歌的 OpenId Connect 是 OAuth2 的一个实践,集成了谷歌 OpenId Connect 的网站,可以实现用谷歌账号登录它们的网站,比如说我们熟悉的 StackOverflow 就可以集成了 OpenId Connect (谷歌还有一个叫 Sign in with Google 的客户端 SDK,虽然也是基于 OAuth2,但是经过了封装和标准协议还是有些区别。比如 Reddit 等网站谷歌账号登录就是用的这个 SDK 。为了阐述标准的 OAuth2,今天我们还是用使用  OpenId Connect  的 StackOverflow 来做说明)。

如果我们之前已经用谷歌账号登录过 StackOverflow,可以先将浏览器 Cookie 缓存清除。再打开 StackOverflow 网站。

用谷歌账号登陆前 StackOverflow,打开 F12 Network,并选中 Preserve log,这样在网页重定向之后,之前的请求记录仍然会保留下来。

 完成用谷歌账号登录后,我们来一一分析在这期间发生的请求

 

在阅读下面的步骤之前,请保证已经了解了什么是重定向——《》

 

我们从浏览器可以看到的相关请求有:

1、用户点击谷歌账号进行登录,returnurl 是用户现在停留的页面,我停留在 StackOverflow 首页。

https://stackoverflow.com/users/login?
  ssrc=head
  &returnurl=https://stackoverflow.com/

 

{
  "fkey": "0e092d8da5b2ef159f31ca6e96b702bed161d848e75e108b5619adeb57f62b49",
  "ssrc": "head",
  "email": "",
  "password": "",
  "oauth_version": "2.0",
  "oauth_server": "https://accounts.google.com/o/oauth2/auth"
}

StackOverFlow 后端返回谷歌的 OAuth2 接口,自己的 client_id,以及 redirect_uri 是到谷歌授权服务器的 url

Status Code: 302 Found
Location: https://accounts.google.com/o/oauth2/auth?
  client_id=717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com
  &scope=profile email
  &redirect_uri=https://stackauth.com/auth/oauth2/google
  &state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}   &response_type=code

2、浏览器收到上面的 302 后,就会用 Location 里的 url 再发出一次请求。这样就会带上 client_id 和 redirect_uri 请求到谷歌授权服务器

https://accounts.google.com/o/oauth2/auth
  ?client_id=717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com
  &scope=profile email
  &redirect_uri=https://stackauth.com/auth/oauth2/google
  &state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}   &response_type=code

谷歌授权服务器的响应是 302 重定向

    • 当需要客户同意授权时,返回的重定向地址是谷歌的授权页面。客户点击同意后会在后面会再重定向到 StackOverflow 设置的 redirect_url 后端地址
    • 当不需要客户同意授权时,返回的重定向地址直接就是 stackauth.com 是 StackOverFlow 在谷歌 设置的自己的 redirect_url 后端地址,后面的参数有谷歌给予的授权码,就是下面 Location 中的 code
Status Code: 302 Found
Location: https://stackauth.com/auth/oauth2/google
  ?state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}
  &code=4/0AfJohXkprUYlXEgDK2tLi_a0hVMLckl6WnTepFNvwSbs0KT2je0WxaomUWbLPeDvfZIXQQ
  &scope=email profile https://www.googleapis.com/auth/userinfo.profile openid https://www.googleapis.com/auth/userinfo.email&authuser=0&prompt=none

2、浏览器收到上面的重定向后,就会用 Location 里的 url 再发出一次请求。这样就会带上授权码请求到 stackOverFlow 后端,然后 stackOverFlow 后端 会把授权码 code 和自己持有的 clientsecret 一起发给谷歌换取令牌

https://stackauth.com/auth/oauth2/google?
  state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}   &code=4/0AfJohXkprUYlXEgDK2tLi_a0hVMLckl6WnTepFNvwSbs0KT2je0WxaomUWbLPeDvfZIXQQ   &scope=email profile https://www.googleapis.com/auth/userinfo.profile openid https://www.googleapis.com/auth/userinfo.email&authuser=0   &prompt=none

stackOverFlow 后台的响应,可以看到也是一个重定向 302。

Status Code: 302 Found
Location: https://stackoverflow.com/users/oauth/google?
  code=4/0AfJohXkprUYlXEgDK2tLi_a0hVMLckl6WnTepFNvwSbs0KT2je0WxaomUWbLPeDvfZIXQQ
  &state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}
  &s=272ab7f4f4cd4640b68720f3c05770f5

3、xx

https://stackoverflow.com/users/oauth/google?
  code=4/0AfJohXkprUYlXEgDK2tLi_a0hVMLckl6WnTepFNvwSbs0KT2je0WxaomUWbLPeDvfZIXQQ
  &state=
  {"sid":1,"st":"59:3:1b8,16:c4729f2f7e47e8e0,10:1700192426,16:9b919914a5835436,ab53156abc79d1c3efbfbd96539ee08ce612452f12f2862ff35bb6c82ad2f805","cid":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","k":"Google","ses":"272ab7f4f4cd4640b68720f3c05770f5"}
  &s=272ab7f4f4cd4640b68720f3c05770f5

xx

Status Code: 302 Found
Location: https://stackoverflow.com/

到这里

 

后续的获取访问令牌,和通过访问令牌获取谷歌资源都是 StackOverflow 后端与谷歌进行交互的

 

标签:OAuth2,16,谷歌,auth,google,https,com
From: https://www.cnblogs.com/suBlog/p/17838334.html

相关文章

  • identityserver,OAuth2.0,JWT之间的关系
    OAuth2.0是一种授权框架,用于应用程序之间安全的共享用户资源,它允许用户授权第三方应用程序访问他们的资源,列如照片,视频,联系人列表等,而不必将用户名和密码提供给第三方应用程序,OAuth2.0通过令牌来代表用户授权,这些令牌可以被第三方应用程序用于访问用户资源,而不必知道用户的凭据。O......
  • 在net core 6中如何配置oauth2.0
    在.NETCore6中配置OAuth2.0可以通过使用Microsoft.AspNetCore.Authentication.OAuth包来实现。以下是一个简单的示例,演示了如何在.NETCore6中配置OAuth2.0来与GitHub进行集成:首先,安装Microsoft.AspNetCore.Authentication.OAuth包:```bashdotnetaddpackageMicrosoft.AspN......
  • OAuth2 介绍
    OAuth简介OAuth是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能。每一个令牌授权一个特定的网站在特定的时间段内允许可访问特定......
  • Spring Boot整合OAuth2实现GitHub第三方登录
    GithubOAuth第三方登录示例1、第三方登录原理第三方登录的原理是借助OAuth授权来实现,首先用户先向客户端提供第三方网站的数据证明自己的身份获取授权码,然后客户端拿着授权码与授权服务器建立连接获得一个AccessToken,之后客户端就可以通过AccessToken来与资源服务器进行交互......
  • pig4cloud框架系列五:OAuth2之授权码模式认证
    前言:OAuth2目前被广泛用于第三方登录场景中,用于鉴权,认证。本文主要简单介绍一下授权码模式认证。场景:使用微信登录迅雷一,名词概念1,第三方应用程序:迅雷2,服务提供商:微信3,资源所有者:登录用户4,认证服务器:微信用来处理认证的服务器5,资源服务器:微信存放用户生成的资源的服务器,它......
  • 【11.0】Fastapi的OAuth2.0的授权模式
    【一】OAuth2.0的授权模式授权码授权模式(AuthorizationCodeGrant)隐式授权模式(ImplicitGrant)密码授权模式(ResourceOwnerPasswordCredentialsGrant)客户端凭证授权模式(ClientCredentialsGrant)【二】密码授权模式【1】FastAPI的OAuth2PasswordBearer说明......
  • 深入探讨Spring Security的OAuth2客户端模式
    介绍OAuth2是一种常见的身份验证和授权协议,它允许用户授权第三方应用程序访问他们的资源。SpringSecurity是一个强大的安全框架,它提供了OAuth2客户端模式的支持。在本文中,我们将深入探讨SpringSecurity的OAuth2客户端模式。OAuth2客户端模式OAuth2客户端模式是一种简单的身份......
  • Oauth2.0授权码模式
    参考:https://blog.csdn.net/qq15035899256/article/details/129541483授权码模式这种模式是最安全的一种模式,也是推荐使用的一种,比如我们手机上的很多App都是使用的这种模式。相比隐式授权模式,它并不会直接返回Token,而是返回授权码,真正的Token是通过应用服务器访问验证服......
  • 单点登录场景中的CAS协议和OAuth2.0协议对比
    相信关注过CAS和OAuth2.0协议的朋友们,都有大概的了解,简单描述两个协议的主要区别,网上的伙伴们通常会说:CAS单点登录时,保护客户端资源OAuth2.0是保护服务端资源安全而对于单点登录场景来说,无论是保护客户端资源,还是保护服务端资源,最终都是完成认证中心的认证,使访问的资源......
  • 通过 Keycloak 结合 OAuth2.0协议进行 Amazon API Gateway 鉴权
    1.简介本文介绍了如何通过Keycloak,并结合AmazonAPIGateway内置的授权功能,完成对Amazon资源请求的鉴权过程。APIGateway帮助开发者安全的的创建、发布、维护并管理API的访问。在中国区,由于Cognito仍未上线,因此使用Keycloak作为API调用的鉴权服务,具有重要的实际意......