美文网首页
登录和第三方授权

登录和第三方授权

作者: Hsicen | 来源:发表于2019-10-11 11:35 被阅读0次

登录和第三方授权

登录和授权

登录:身份认证,即确认你是你的过程

授权:由身份或持有令牌确认享有某些权限权限(例如获取用户信息),而登录过程实质上的目的也是为了确认权限

总结:在实际应用中,多数场景下的登录和授权界限是模糊的

HTTP中授权方式

Cookie和Authorization Header

Cookie

起源

源于购物车功能的需求,由Netscape浏览器开发团队打造

工作机制
  1. 服务器需要客户端保存的内容放在Set-Cookie headers里返回,客户端会自动保存
  2. 客服端保存的Cookies,会在之后请求相同服务器的所有请求里都携带进Cookieheader里返回给服务器
  3. 客服端保存Cooki是按照服务器域名来分类的,例如shop.com发回的Cookie保存下来以后,在之后games.com的请求中并不会携带
  4. 客户端保存的Cookie在超时后会被删除,没有设置超时时间的Cookie(简称Session Cookie)在浏览器关闭之后就会自动删除;另外,服务器也可以主动删除还未过期的客户端Cookies


    image
作用
  1. 会话管理:登录状态,购物车


    image
  2. 个性化:用户偏好,主题


    image
    image
  3. Tracking:分析用户行为


    image
XSS(Cross-site scripting)

跨站脚本攻击:使用JavaScript拿到浏览器的Cookie之后,发送到自己的网站,以这种方式来盗取用户的Cookie。应对方式:Server在发送Cookie时,敏感的Cookie加上HttpOnly
HttpOnly:这个Cookie只能用于HTTP请求,不能被JavaScript调用。它可以防止本地代码滥用Cookie

XSRF(Cross-site request forgery)

跨站请求伪造:在用户不知情的情况下访问已经保存了Cookie的网站,以此来越权操作用户账户(例如盗取用户资金),应对方式主要是从服务器安全角度考虑
Referer:Referer校验,访问来源识别

Authorization

方式

Basic 和 Bearer

Basic

格式:Authorization: Basic <username : password(Base64ed)>

Bearer

格式:Authorization: Bearer <bearer token>
bearer token的获取方式:通过OAuth2的授权流程

OAuth2流程
  1. 第三方网站向授权方网站申请第三方授权合作,拿到client_id和client_secret
  2. 用户在使用第三方网站时,点击通过XX(如Github)授权按钮,第三方网站将页面跳转到授权方网站,并传入client_id作为自己的身份标识
  3. 授权方根据client_id,将第三方网站的信息和第三方网站需要的用户权限展示给用户,并询问用户是否同意授权
  4. 用户点击同意授权按钮后,授权方网站将页面跳转回第三方网站,并传入Authorization Code作为用户认可的凭证
  5. 第三方网站将Authorization Code发送回自己的服务器
  6. 服务器将Authorization Code和自己的client_secret一并发送给授权方的服务器,授权方服务器在验证通过后,返回access token。OAuth流程结束
  7. 在上面的过程结束后,第三方网站的服务器(有时客户端也会)就可以使用access token作为用户授权的令牌,向授权方网站发送请求来获取用户信息或操作用户账户。但这已经在OAuth流程之外

为什么OAuth要引入Authorization Code,并需要申请授权的第三方将Authorization Code发送回自己的服务器,再从服务器来获取access token,而不是直接返回access token呢?这样复杂的流程意义何在?

为了安全,OAuth不强制授权流程必须使用HTTPS,因此需要保证当通信路径中存在窃听者时,依然具有足够高的安全性

第三方App通过微信登录流程
  1. 第三方App向腾讯申请第三方合作授权,拿到client_id和client_secret
  2. 用户在使用第三方App时,点击通过微信登录,第三方App将使用微信SDK跳转到微信,并传入自己的client_id作为自己的身份标识
  3. 微信通过和服务器交互,拿到第三方App的信息,并限制在界面中,然后询问用户是否同意授权该App使用微信来登录
  4. 用户点击使用微信登录后,微信和服务器交互将授权信息交互,然后跳转回第三方App,并传入Authorization Code作为用户得到认可的凭证
  5. 第三方App调用自己服务器的微信登录Api,并传入Authorization Code,然后等待服务器的响应
  6. 服务器在收到登录请求后,拿到上传的Authorization Code去向微信的第三方授权接口发送请求,将Authorization Code和自己的client_secret一起作为参数发送,微信在验证通过后,返回access token
  7. 服务器在收到access token后,立即拿着access token去向微信的用户信息接口发送请求,微信验证通过后,返回用户信息
  8. 服务器在收到用户信息后,在自己的数据库中为用户创建一个账户,并使用从微信服务器拿到的用户信息填入自己的数据库,并将用户的id和用户为微信id做关联
  9. 用户创建完成后,服务器向客户端的请求做出响应,传送回刚才创建好的用户信息
  10. 客户端收到服务器的响应,用户登录成功
在自家App中使用Bearer token

有的App会在Api的设计中,将登录和授权设计成类似OAuth2的过程,但简化掉Authorization Code概念。即:登录接口请求成功时,会返回access token,然后客户端在之后的请求中,就可以使用这个access token来当做bearer token进行用户操作

Refresh token
{
  "token_type": "Bearer",
  "access_token": "xxxxx",
  "refresh_token": "xxxxx",
  "expire_time":"xxxxx"
}

用法:access token有实效时间,在它失效后,调用refresh token接口,并传入refresh token来获取新的access token

目的:安全,当access token失窃时,由于它有实效时间,因此坏人只有较短的时间来做坏事;同时,由于(在标准的OAuth2流程中) refresh token永远只存在于第三方服务的服务器中,因此refresh token几乎没有失窃的风险

相关文章

  • 登录和第三方授权

    登录和第三方授权 登录和授权 登录:身份认证,即确认你是你的过程授权:由身份或持有令牌确认享有某些权限权限(例如获...

  • Mac 应用接入Google 第三方登录

    Mac 应用接入Google 第三方登录 所有的第三方登录,本质上应该都是 OAuth 授权。 OAuth授权共有...

  • 微信授权注册与登陆

    前段时间公司网站登录注册改版,做了基于微信的第三方授权登录和注册,下面说的是网站应用微信授权实现登录注册,。踩了一...

  • Spring security(四)-spring boot +

      现在主流的登录方式主要有 3 种:账号密码登录、短信验证码登录和第三方授权登录,前面一节Spring secu...

  • SpringSecurity结合OAuth2实现第三方授权

    SpringSecurity结合OAuth2实现第三方授权 一 OAuth2第三方登录架构 1.1 授权码模式架构...

  • QQ邮箱客户端登录方式

    1>登录网页版QQ邮箱2>设置3>账户4>生成授权码 5>在第三方客户端上使用授权码进行登录

  • iOS应用间跳转详解

    一、应用场景 单点授权登录,第三方分享,第三方登录 二、跳转方法 例如手机有两个应用,app1和app2,app1...

  • 微博、微信和QQ OAuth2.0开发记录

    微信 第三方登录和小程序/公众号通过unionId判断是否是同一个用户。 第三方网站登录授权作用域可以随时修改 小...

  • 登录和第三方授权

    Cookie 起源:购物车工作机制:通过报文中的cookie和set-cookie使得服务器和客户端来维护一套存储...

  • 关于第三方回调业务分发的思考

    一、初步介绍 工作中,我们或多或少都免不了和第三方交互。例如:对接第三方支付、第三方登录授权、对接银行服务。但我这...

网友评论

      本文标题:登录和第三方授权

      本文链接:https://www.haomeiwen.com/subject/ymjtmctx.html