Oauth 2.0 认证原理

0x01.关于Oauth

Oauth是允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用的协议。

例如我们想要获取github的用户账号信息。

oauth2.0请求


进入到github就能看到,你授权的账号信息了。

github授权账号信息



0x02.Oauth2.0成员

  • Resource Owner(资源拥有者:用户)
  • Client (第三方接入平台:请求者)
  • Resource Server (服务器资源:数据中心)
  • Authorization Server (认证服务器)


从成员看Oauth2.0基本流程。

Oauth2.0基本流程


原理很简单,用户访问App,App访问Authorization Server请求权限,

Authorization Server得到用户同意后,返回token,

App通过这个token向Authorization Server索要数据,

App只能从Authorization Server这个中介获取服务器数据,而无法直接访问Resource Server。


0x03.Oauth2.0类型

关于Oauth使用情况

Oauth用权限大小可以分为:

  • 基础公开的API:站外网站,站外应用等
  • 基础公开的API+用户资料:站内应用,移动App,站外使用账号登录
  • 基础公开的API+用户所有权限:直接输入密码(Oauth1.0)


关于Oauth提权类型

  • #### authorization_code(Oauth提供的token代码): Web-server、apps

authorization_code模式


  • #### implicit(简单模式):Browser-based apps,Mobile apps

implicit模式


  • password(密码模式):Username/password access
  • client_credentials(客户端模式):Application access

其实第一种和第二中是一样的,都是用Oauth Server提供的token实现资源获取,只是获取的资源类型不一样,权限不一样。

authorization_code对应上面讲到得,获取基础公开API,

implicit对应第二种,获取用户信息。

password是种不安全的方式。

client_credentials是不需要Oauth认证的,即直接访问该网站提供的开放的API。


看看例子,从网上偷下来的facebook的Oauth2.0认证:

facebook Oauth2.0

第一步:

App向 Oauth Server 请求的URL :

    https://facebook.com/dialog/oauth?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=REDIRECT_URI&scope=email

    里面带着该app的id,key,请求的类型,返回一串的access_token和事件类型code。

第二步:

回调,跳转到权限确认页面等待用户确认授权:

    https://facebook.com/dialog/oauth?response_type=code&client_id=28653682475872&redirect_uri=example.com&scope=email

    该页面通过redirect_uri,回调到指定的callback页面。

第三步:

利用返回的access_token,将app的id和key以及code代码发包到:

    POST https://graph.facebook.com/oauth/access_token

    这一步是为了获取token。

第四步:

    Oauth Server返回token,这个时候,就可以通过token获取用户授权的资源了。

转载于:https://my.oschina.net/ckGG/blog/482047

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security OAuth2.0 是基于 Spring Security 框架实现的用于认证和授权的开源库。它提供了一种标准的方式来保护和控制你的应用程序中的资源,同时也支持第三方应用程序通过 OAuth2.0 协议与你的应用程序进行交互。 OAuth2.0 是一个开放标准的授权协议,它允许用户授权第三方应用程序访问他们在另一个服务(资源服务器)上存储的受保护资源,而无需将用户名和密码提供给第三方应用程序。OAuth2.0 协议定义了四种角色:资源所有者(用户),客户端(第三方应用程序),授权服务器(负责验证用户身份并颁发访问令牌),以及资源服务器(存储受保护资源)。下面是 Spring Security OAuth2.0 的工作原理: 1. 客户端向授权服务器发送认证请求,包括客户端标识和重定向 URI。 2. 授权服务器验证客户端标识,并要求用户进行身份验证。 3. 用户提供凭据进行身份验证后,授权服务器生成授权码(authorization code)。 4. 授权服务器将授权码发送回客户端提供的重定向 URI。 5. 客户端收到授权码后,使用该授权码向授权服务器发送令牌请求。 6. 授权服务器验证客户端和授权码,并生成访问令牌(access token)和可选的刷新令牌(refresh token)。 7. 授权服务器将访问令牌和刷新令牌发送回客户端。 8. 客户端使用访问令牌向资源服务器请求受保护资源。 9. 资源服务器验证访问令牌,并向客户端返回受保护资源。 Spring Security OAuth2.0 提供了一些核心的组件来支持 OAuth2.0 协议,例如: - AuthorizationServer:负责颁发令牌和管理客户端的认证服务器。 - ResourceServer:保护受 OAuth2.0 保护的资源的资源服务器。 - TokenStore:用于存储访问令牌和刷新令牌的接口,可以使用内存、数据库或 Redis 等作为存储方式。 - UserDetailsService:用于加载用户信息的接口,可以从数据库或其他数据源中获取用户信息。 通过配置这些组件,你可以在 Spring Security 中实现 OAuth2.0 认证和授权的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值