Android开发知识学习——登录和第三方授权

news2024/11/25 4:32:49

文章目录

  • 学习资源来自:扔物线
  • 登录和授权的区别
  • HTTP 中确认授权(或登录)的两种方式
  • Cookie
  • Authorization
    • 主流用法:Basic
    • 主流用法:Bearer:
      • OAuth2 的流程:
      • 第三方 App 通过微信登录的流程
      • Refresh token
  • 课后题

学习资源来自:扔物线

登录和授权的区别

登录:身份认证,即确认「你是你」的过程。
授权:由身份或持有的令牌确认享有某些权限(例如获取用户信息)。而登录过
程实质上的目的也是为了确认权限。
因此,在实际的应用中,多数场景下的「登录」和「授权」界限是模糊的。

HTTP 中确认授权(或登录)的两种方式

  1. 通过 Cookie
  2. 通过 Authorization Header

Cookie

起源:「购物⻋」功能的需求,由 Netscape 浏览器开发团队打造。

工作机制:

  1. 服务器需要客户端保存的内容,放在 Set-Cookie headers 里返回,客户端会自动保存。
  2. 客户端保存的 Cookies,会在之后的所有请求里都携带进 Cookie header里发回给服务器。

在这里插入图片描述
3. 客户端保存 Cookie 是按照服务器域名来分类的,例如 shop.com 发回的Cookie 保存下来以后,在之后向 games.com 的请求中并不会携带。
4. 客户端保存的 Cookie 在超时后会被删除、没有设置超时时间的 Cookie(称作 Session Cookie)在浏览器关闭后就会自动删除;另外,服务器也可以主动删除还未过期的客户端 Cookies。
在这里插入图片描述
在这里插入图片描述

  • Cookie 的作用

    • 会话管理:登录状态、购物⻋
      在这里插入图片描述在这里插入图片描述
    • 个性化:用户偏好、主题
      在这里插入图片描述
      在这里插入图片描述
    • Tracking:分析用户行为
  • XSS (Cross-site scripting)(了解即可):跨站脚本攻击。即使用 JavaScript 拿到浏览器的 Cookie 之后,发送到自己的网站,以这种方式来盗取用户Cookie。应对方式:Server 在发送 Cookie 时,敏感的 Cookie 加上HttpOnly。

    • 应对方式:HttpOnly——这个 Cookie 只能用于 HTTP 请求,不能被JavaScript 调用。它可以防止本地代码滥用 Cookie。
  • XSRF (Cross-site request forgery)(了解即可):跨站请求伪造。即在用户不知情的情况下访问已经保存了 Cookie 的网站,以此来越权操作用户账户(例如盗取用户资金)。应对方式主要是从服务器安全⻆度考虑,就不多说了。

    • 应对方式:Referer 校验

Authorization

主流用法: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 发送回自己的服务器
在这里插入图片描述

  1. 服务器将 Authorization code 和自己的 client secret 一并发送给授权方的服务器,授权方服务器在验证通过后,返回 access token。OAuth授权流程结束。
    在这里插入图片描述

  2. 在上面的过程结束之后,第三方网站的服务器(或者有时客户端也会)就可以使用 access token 作为用户授权的令牌,向授权方网站发送请求来获取用户信息或操作用户账户。但这已经在 OAuth 流程之外。
    在这里插入图片描述

  • 为什么 OAuth 要引入 Authorization code,并需要申请授权的第三方将Authorization code 发送回自己的服务器,再从服务器来获取 access token,而不是直接返回 access token ?这样复杂的流程意义何在? 为了安全。OAuth不强制授权流程必须使用 HTTPS,因此需要保证当通信路径中存在窃听者时,依然具有足够高的安全性。

第三方 App 通过微信登录的流程

第三方 App 通过微信登录的流程,也是一个 OAuth2 流程

  1. 第三方 App 向腾讯申请第三方授权合作,拿到 client id 和 client secret

  2. 用户在使用第三方 App 时,点击「通过微信登录」,第三方 App 将使用微信 SDK 跳转到微信,并传入自己的 client id 作为自己的身份标识

  3. 微信通过和服务器交互,拿到第三方 App 的信息,并限制在界面中,然后询问用户是否同意授权该 App 使用微信来登录

  4. 用户点击「使用微信登录」后,微信和服务器交互将授权信息提交,然后跳转回第三方 App,并传入 Authorization code 作为用户认可的凭证

  5. 第三方 App 调用自己服务器的「微信登录」Api,并传入 Authorizationcode,然后等待服务器的响应

  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 概念。即:登录接口请求成功时,会返回 accesstoken,然后客户端在之后的请求中,就可以使用这个 access token 来当做bearer token 进行用户操作了。

Refresh token

{
"token_type": "Bearer",
"access_token": "xxxxx",
"refresh_token": "xxxxx",
"expires_time": "xxxxx"
}

用法:access token 有失效时间,在它失效后,调用 refresh token 接口,传入refresh_token 来获取新的 access token。
在这里插入图片描述
目的:安全。当 access token 失窃,由于它有失效时间,因此坏人只有较短的时间来「做坏事」;同时,由于(在标准的 OAuth2 流程中)refresh token 永远只存在与第三方服务的服务器中,因此 refresh token 几乎没有失窃的⻛险。

课后题

1.【单选题】HTTP 中会被用来使用登录授权的两个 Header 是什么?
A. Cookie 和 Authorization
B. Cookie 和 Authentication
C. Cache 和 Authorization
D. Cache 和 Authentication

答案: A
答案解析:HTTP 中用于登录授权的两个 Header 是 Cookie 和 Authorization。其中,Cookie 用于保存用户登录后的身份信息,而 Authorization 则用于在每次请求中携带用户的授权信息,以证明用户已经通过身份验证并具有相应的权限。因此选 A

2.【单选题】Cookie 的工作机制?
A. 服务器使用 Cookie header 返回希望客户端保存的信息,客户端在下次请求中使用 Cookie Header 将内容附上,然后删掉 Cookie
B. 服务器使用 Set-Cookie header 返回希望客户端保存的信息,客户端在下次请求中使用 Cookie Header 将内容附上,然后删掉 Cookie
C. 服务器使用 Cookie header 返回希望客户端保存的信息,客户端在以后的每次请求中使用 Cookie Header 将内容附上
D. 服务器使用 Set-Cookie header 返回希望客户端保存的信息,客户端在以后的每次请求中使用 Cookie Header 将内容附上

答案: D
答案解析:Cookie 是服务器在客户端上存储数据的一种方式。当客户端向服务器发送请求时,服务器会将 Set-Cookie header 包含在响应头中返回给客户端,以指示客户端保存特定的信息。客户端会将保存的 Cookie 数据附加在后续的请求头中,以供服务器使用。服务器可以使用 Cookie header 来获取客户端保存的数据,以实现用户的个性化体验。因此选 D

3.【多选题】Cookie 的作用?
A. 会话管理:登录状态、购物车
B. 个性化:用户偏好、主题
C. 用户追踪:分析用户行为、定向广告

答案: ABC
答案解析:

4.【单选题】当使用 Basic Authorization 进行授权的时候,格式是?
A. Authorization: Basic username:password
B. Authorization: Basic username:password(Base64ed)
C. Authorization: Basic username:password(MD5ed)

答案: B
答案解析:

5.【单选题】OAuth 流程中,Authorization code 的作用是?
A. 保证用户不会篡改授权信息
B. 保证恶意的监听者不会获取到真正可用的授权信息
C. 保证获取授权的第三方服务方不会滥用自己的授权信息
D. 保证授权信息可以正确到达申请授权的第三方服务方

答案: B
答案解析:在 OAuth 授权流程中,Authorization code 是由授权服务器颁发给客户端的临时授权码,其作用是保证授权码不会被篡改,从而防止恶意的监听者获取到真正可用的授权信息。因此,答案为 B。

6.【单选题】refresh token 的作用是?
A. 让用户保持每过一段时间登录一次,用委婉的方式保证用户在线时长
B. 强制性经常更换一下 access token,可以让服务器上不会有很久不用的 access token,提高系统的稳定性
C. 当 access token 失窃时,可以保证盗窃者在未被发现的情况下也只能在一段时间内使用 token,并且在发现 token 失窃之后可以立即换上新的 token 而无需用户重新授权

答案: C
答案解析:Refresh token 是用于在 access token 失效之前,用来获取新的 access token 的凭证。在 OAuth 2.0 授权机制中,Refresh token 可以用于延长 access token 的有效期,或者在 access token 丢失或被盗的情况下重新生成新的 access token,以保护应用的安全性。因此选 C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1147369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

问题 A: 数塔(dp算法)

算法分析&#xff1a; 1.创建两个数组&#xff0c;一用作输入&#xff08;下层&#xff09;&#xff0c;一用于复制&#xff08;上层&#xff09; &#xff08;1&#xff09;第一层时&#xff0c;直接输入进temp数组 &#xff08;2&#xff09;大于第一层&#xff0c;输入arr…

英语兔语法笔记(1)动词分类+动词时态

B站英语兔的语法课&#xff0c;强推&#xff01;和学校里面的不同&#xff0c;通俗易懂&#xff0c;看过之后真的醍醐灌顶~ 英语兔语法网课https://www.bilibili.com/video/BV1XY411J7aG?p1&vd_source1d1be06bfa4daa398bc518a66de92cf8 一.动词分类 大致看一下就好&…

深度神经网络的数学原理:基于超平面、半空间与线性区域的表示

概述 以前的文章主要描述了神经网络&#xff0c;即多层感知机、全连接模型的运行原理&#xff0c;还是以实验为主&#xff0c;数学描述为辅的方式&#xff0c;这篇文章以纯数学的视角来描述神经网络的运行原理&#xff0c;主要以前馈过程为主&#xff08;反向传播的动力学过程…

Spring Cloud之Docker的学习【详细】

目录 Docker 项目部署问题 总结 镜像与容器 Docker的安装 Docker基本操作 镜像相关命令 拉取镜像 镜像保存 删除镜像 镜像加载 容器相关命令 删除容器 数据卷 数据卷命令 数据挂载 自定义镜像 Dockerfile 案例 Docker-Compose Compose文件 Docker-Compos…

openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色

文章目录 openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色109.1 创建、修改和删除角色109.2 内置角色 openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色 角色是一组用户的集合。通过GRANT把角色授予用户后&#xff0c;用户即具有了角色的所有…

[计算机提升] Windows设置

2.1 Windows设置 Windows设置提供了一个用户界面&#xff0c;用于更改和定制Windows操作系统的各种功能和选项。通过Windows设置&#xff0c;用户可以轻松访问和修改各种系统设置&#xff0c;包括个性化选项、网络和互联网设置、设备设置、应用程序安装和管理、隐私设置等。 以…

【Linux】Linux的安装以及常见命令

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Linux的相关操作吧 一.Linux的安装 1.创建虚拟机 2.选择linux 3.配置虚拟机 4.开启虚拟机 默认回车即可 5.安装linux 5.登录账户 6.解决网络问题 ①先查看一下…

mathtype7.4激活密钥免费2023最新

准确来讲MathPage支持MathJax技术&#xff0c;可利用MathPage技术选择发布您的Word文档与MathML方程&#xff0c;显示为网页页面。实际上我们可以这样讲兼容个版本office&#xff1a;MathType与Office有很好的兼容性&#xff0c;可与office办公软件或WPS配合使用。大家都知道支…

Java-逻辑控制

本章重点&#xff1a; 1. Java中程序的逻辑控制语句 2. Java中的输入输出方式 3. 完成猜数字游戏 1. 分支结构 1.1 if语句 //如果布尔表达式结果为true&#xff0c;执行if中的语句&#xff0c;否则不执行。 比如&#xff1a;小明&#xff0c;如果这次考试考到90分或…

leetcode经典面试150题---3.删除有序数组中的重复项

目录 题目描述 前置知识 代码 方法一 双指针 思路 图解 实现 复杂度 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致…

FL Studio21.2演示版下载

FL Studio 21.2 带有 stem 分离和 FL Cloud&#xff0c;这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips&#xff08;音频剪辑&#xff09;和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio 21.2 的发布&am…

抖音很火的情侣飞行棋/真心话大冒险/情侣扫雷html网站源码带在线支付、代理分销等!

-------- 演示地址 -------- 演示地址&#xff1a;http://game.71.vy386.cn 演示后台&#xff1a;http://game.71.vy386.cn/admin 后台账号&#xff1a;admin888 后台密码&#xff1a;admin888 -------- 程序特色 -------- 1、完整的分销制度&#xff0c;可自定义多种不同…

黔院长 | 一文了解五脏的脏象!

你知道五脏的脏象是怎样的吗&#xff1f;下面一起来了解一下吧。 首先是我们的心&#xff0c;心主血脉&#xff0c;在体合脉&#xff0c;开窍于舌&#xff0c;其华在面。是说心脏是我们生命的根本&#xff0c;心气推动全身的血脉得以正常运行&#xff0c;心发生的生理和病理可…

C语言浮点型在内存中的存储

目录 前言&#xff1a; 引言&#xff1a; 浮点数存储规则 举个栗子&#xff1a; TIP&#xff1a; 单精度浮点数存储的模型&#xff08;float&#xff09; 双精度浮点数存储的模型&#xff08;double&#xff09; IEEE对 M 的特殊规定 IEEE对 E 的特殊规定 小试牛刀 先…

qt-C++笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度

qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度 code review! 文章目录 qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt7.上述代码中QVBoxLayout&#xff0c…

EasyRecovery2024免费激活码

EasyRecovery这款软件可以恢复被删除的数据&#xff0c;那我就简单为大家介绍一下这款数据恢复软件EasyRecovery吧&#xff01; EasyRecovery是一款操作简单、功能强大数据恢复软件&#xff0c;通过EasyRecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或…

Leetcode刷题详解——下降路径最小和

1. 题目链接&#xff1a;931. 下降路径最小和 2. 题目描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择…

vue源码分析(七)—— createComponent

文章目录 前言一、createComponent 参数说明二、createComponent 源码详解1.baseCtor的实际指向2.extend 方法3.判断Ctor是否是函数的判断4.installComponentHooks方法5.返回一个带标识的组件 vnode 前言 createComponent文件的路径&#xff1a; src\core\vdom\create-componen…

C++之C++11引入enum class与传统enum关键字总结(二百五十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ubuntu配置 Conda 更改默认环境路径

我的需求是以后凡是新建一个虚拟环境都需要安装在一个挂载了大容量的分区/data里面 /home里面的是即将爆满但是还能塞点东西的硬盘. 如果您想要永久更改 Conda 的默认环境路径&#xff0c;可以编辑 Conda 的配置文件。首先&#xff0c;找到 Conda 的配置文件通常是 .condarc 文…