- 1 信息安全简介
- 1.1 信息安全发展史
- 1.2 信息安全等级保护
- 2 安全 OS
- 2.1 UNIX 系统安全
- 2.1.1 设置健壮的密码
- 2.1.2 删除所有的特殊账户
- 2.1.3 关闭不需要的服务
- 2.1.4 远程登陆管理
- 2.1.5 限制 IP 访问
- 2.1.6 日志监控
- 2.2 Linux 系统安全
- Linux 安全设置手册
- Linux 服务器安全加固
- Linux 防火墙
- SELinux
- SSH 免密登陆
- 2.3 Windows 系统安全
- Windows 常见安全隐患
- 防火墙-Microsoft Defender
- 本章参考
- 3 访问控制技术
- 3.1 基于角色的访问控制 RBAC
- 基于 RBAC 的延展-用户组(租户)
- 示例 1:Python Django 后台管理
- 示例 2:Python flask_appbuilder 后台管理
- 3.2 认证
- 3.2.1 认证机制
- 3.2.2 OpenID
- 3.2.3 LDAP
- 3.2.4 Kerberos
- 3.2.5 数字签名
- 3.2.6 基于证书的认证
- 3.3 授权
- 3.3.1 OAuth
- 3.4 HTTPS
- 3.4.1 HTTPS 原理
- 3.4.2 证书
- 3.4.3 自签名证书
- 本节参考
- 案例
- 天网 MAZE 的信用卡机制
- S3 认证机制
- 云盘认证机制
- 双因子认证
- 扫码登陆
- 单点登陆 SSO
- 本章参考
- 4 安全编程
- 4.1 内存管理
- 4.2 安全编程实践
- 4.2.1 使用断言进行防止错误
- 4.3 语言相关的安全编码
- 4.3.1 net 中使用安全函数
- 4.3.2 PHP 代码执行漏洞
- 4.4 源码保护
- Java 源码保护
- python 源码保护
- 本章参考
- 5 安全算法
- 6 安全架构
- 云安全
- 云安全事件案例
- 云计算带来的安全挑战
- 应用:安全云/云查杀
- 业界案例
- 华为的安全白皮书
- 参考资料
- 附录
- 安全相关法律法规
- 个人信息安全
- 云安全标准与组织
- 国际
- 国内
3.3.1 OAuth
OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号 信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 OAuth 是安全的。oAuth 是 Open Authorization 的简写。
表格 5 oAuth 版本史
版本 | 简介 | 说明 |
---|---|---|
OAuth 1.0 | OAuth Core 1.0 版本发布于 2007 年 12 月 4 日,由于存在可被会话定向攻击(session fixation attack) 的缘故,2009 年 6 月 24 日发布了 OAuth Core 1.0 Revision A 版本。最终在 2010 年 4 月,OAuth 成为了 RFC 标准: RFC 5849: The OAuth 1.0 Protocol。 | OAuth 的标准版本涉及三步流程,分别要访问三个 URL。 |
OAuth 2.0 | 2010 年 5 月初在 IETF 发布草案。OAuth 2.0 是 OAuth 协议的下一版本,但不 向后兼容 OAuth1.0。 OAuth 2.0 关注客户端开发者的简易性,同时为 Web 应用,桌面应用和手机,和起居室设备提供专门的认证流程。 | OAuth 2.0 简化开发,流程中去除涉及用户授权的环节。 |
备注:3-Legged OAuth 就是通过 User 的授权,Consumer 可以访问 User 在 Service Provider 的数据;至于 2-Legged OAuth,没有 User 的参与,只是 Consumer 和 Service Provider 的交互。
一个典型的 OAuth 应用通常包括三种角色,分别是:
- Consumer:消费方
- Service Provider:服务提供者
- User:用户
消费方如果想使用服务提供者的 OAuth 功能,通常需要先申请两样东西:
- Consumer Key
- Consumer Secret
OAuth 1.0
OAuth 认证授权就三个步骤:
- 获取未授权的 Request Token。
- 获取用户授权的 Request Token。
- 用授权的 Request Token 换取 Access Token
上面三步分别对应于三个 URL:Request Token URL、User Authorization URL 和 Access Token URL。
图 3 OAuth 流程
说明:
- A:消费方请求 Request Token
- B:服务提供者授权 Request Token
- C:消费方定向用户到服务提供者
- D:获得用户授权后,服务提供者定向用户到消费方
- E:消费方请求 Access Token
- F:服务提供者授权 Access Token
- G:消费方访问受保护的资源
OAuth 2.0
OAuth 2.0 定义了四种授权方式。
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
备注:在 API 市场的 API 授权管理使用中, 消费者 key 常指 appid,消费者 secret 指静态 token。通过静态 token 获取动态 token,动态 token 验证是否过期、是否已授权(若未授权需要在 API 市场订阅,订阅过程会获取提供方的授权 token)。
示例:twitter/google/azure
https://raw.githubusercontent.com/dpgaspar/Flask-AppBuilder/master/examples/oauth/config.py
OAUTH_PROVIDERS = [
{'name':'twitter', 'icon':'fa-twitter',
'remote_app': {
'consumer_key': os.environ.get('TWITTER_KEY'),
'consumer_secret': os.environ.get('TWITTER_SECRET'),
'base_url': 'https://api.twitter.com/1.1/',
'request_token_url': 'https://api.twitter.com/oauth/request_token',
'access_token_url': 'https://api.twitter.com/oauth/access_token',
'authorize_url': 'https://api.twitter.com/oauth/authenticate'}
},
{'name': 'google', 'icon': 'fa-google', 'token_key': 'access_token',
'remote_app': {
'consumer_key': os.environ.get('GOOGLE_KEY'),
'consumer_secret': os.environ.get('GOOGLE_SECRET'),
'base_url': 'https://www.googleapis.com/oauth2/v2/',
'request_token_params': {
'scope': 'email profile'
},
'request_token_url': None,
'access_token_url': 'https://accounts.google.com/o/oauth2/token',
'authorize_url': 'https://accounts.google.com/o/oauth2/auth'}
},
{'name': 'azure', 'icon': 'fa-windows', 'token_key': 'access_token',
'remote_app': {
'consumer_key': os.environ.get('AZURE_APPLICATION_ID'),
'consumer_secret': os.environ.get('AZURE_SECRET'),
'base_url': 'https://login.microsoftonline.com/{AZURE_TENANT_ID}/oauth2',
'request_token_params': {
'scope': 'User.read name preferred_username email profile',
'resource' : os.environ.get('AZURE_APPLICATION_ID'),
},
'request_token_url': None,
'access_token_url':'https://login.microsoftonline.com/{AZURE_TENANT_ID}/oauth2/token',
'authorize_url':'https://login.microsoftonline.com/{AZURE_TENANT_ID}/oauth2/authorize'}
}
]
# OAuth 2.0 去除了用户鉴权步骤,即 request_token_url=None
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论