登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
图解Browser端访问OAuth2 API的安全性问题与解决方案 ...
图解Browser端访问OAuth2 API的安全性问题与解决方案
[ 复制链接 ]
固拆棚
2025-5-29 18:57:36
OAuth2是基于HTTP的认证API,一般与OAuth2搭配的API也是基于HTTP的REST风格API(比如新浪微博和github),很多人一定想过是否可以直接从浏览器端调用REST API。
我最近做了一些这方面的研究,因为OAuth2中有secret key的存在,所以纯粹的客户端是不行的,但是服务端仅仅参与认证过程,由浏览器去调用REST API则是完全可行的。
于是比如你想开发一个github应用,那么服务端只需要一个没有界面的Auth服务就可以了,大部分的工作可以让浏览器端完成,这个架构可以大大减轻服务器的压力,对于不熟悉后端语言的前端工程师来说,是个不错的选择。
首先传统的oauth过程是这样的:
首先由跳转到OAuth服务器的登录认证页面,进行登录或者授权(假如已经在别的地方登录,就只需要授权):
然后服务端通常会返回302跳转到一个带ticket参数的网址,这个网址一般是在OAuth服务器注册的地址,也有些OAuth允许客户端指定:
这样浏览器端拿到302后,会自动转到App服务器,因为请求的Query String里面带了ticket,App Server于是拿到了ticket。客户端对App Server的请求是非Https,这个ticket是不怕被截获的,因为ticket是一次性的,而且攻击者拿到了ticket没有secret key是没法去Oauth服务器骗取token的:
App Server再对Oauth Server发HTTP请求,带上Secret Key:
OAuth服务器会把access_token传给App Server:
原本如果只用服务端访问REST API,这个token保存在服务端就可以了,但是我们现在希望直接在浏览器端用XHR去访问REST API,所以我们必须把token传给浏览器端。
这时候问题出现了,对于大部分开发者而言,花钱买个证书走https是不现实的,而http请求中明文传递token是可能被截获的:
token中包含用户授权信息,只要黑客截获了token,就可以冒充用户身份去Oauth服务器为所欲为:
解决的办法是使用RSA在浏览器端生成一对RSA密钥,然后把公钥传给App Server(建议用cookie,非常方便),Server用公钥加密token后传回给客户端。
我使用的是斯坦福大学的RSA开源实现(这个真的是非常高质量的RSA实现,向斯坦福师生致敬)
http://www-cs-students.stanford.edu/~tjw/jsbn/
学者们的实现比较文艺,依赖关系稍微有些复杂,这里我把所有文件打了个包,方便大家下载:
/Files/winter-cn/RSA.rar
over,接下来在浏览器端去使用token吧。
github API 的一个开源实现,请看 https://github.com/wintercn/github.wind
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
图解
Browser
访问
OAuth2
API
相关帖子
手把手带你通过API创建一个loT边缘应用
官网Chat对话 vs. API调用:本质区别与优化策略
Python Flask框架入门_4.通过token认证验证API的访问权限(数据库连接池版本)
ViggleAi商务合作/ViggleAi API对接/ViggleAi深度合作/Ai视频合作
东南亚日本股票数据API对接文档
国内 Gemini API KEY 获取方式和调用教程 | AI大模型 API 中转站
图解C++智能指针的循环引用
聚焦企业开放OpenAPI痛难点,华为云API Explorer助力构建API门户
华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流
印度尼西亚股票实时数据API对接文档
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
手把手带你通过API创建一个loT边缘应用
0
18
豌畔丛
2025-09-30
安全
官网Chat对话 vs. API调用:本质区别与优化策略
0
790
存叭
2025-10-01
业界
Python Flask框架入门_4.通过token认证验证API的访问权限(数据库连接池版本)
0
997
奄蜊
2025-10-01
业界
ViggleAi商务合作/ViggleAi API对接/ViggleAi深度合作/Ai视频合作
1
286
予捻
2025-10-05
安全
东南亚日本股票数据API对接文档
0
326
凤清昶
2025-10-06
安全
国内 Gemini API KEY 获取方式和调用教程 | AI大模型 API 中转站
1
215
金娅鸣
2025-10-07
安全
图解C++智能指针的循环引用
0
9
皇甫佳文
2025-10-08
安全
聚焦企业开放OpenAPI痛难点,华为云API Explorer助力构建API门户
0
783
唯棉坜
2025-10-10
安全
华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流
1
389
董绣梓
2025-10-10
安全
印度尼西亚股票实时数据API对接文档
0
560
琦谓
2025-10-10
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
固拆棚
2025-5-29 18:57:36
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994888
dage888
999994
3934307807
993690
4
富账慕
10007
5
柴古香
9992
6
匝抽
9986
7
孙淼淼
9989
8
筒濂
9977
9
凌彦慧
9985
10
崔瑜然
9984
查看更多