OAuth 系列(三)简化模式 Implicit

简化模式 (Implicit) 也翻译做隐式模式或者紧凑模式;
简化模式的简化是相对于授权码模式来说的;
上篇文章 OAuth 系列(二)授权码模式Authorization Code
我们讲过要获取 access_token 需要在 Client 服务器上发送 POST 请求;
但是在很多场景中我们可能没有服务器只有浏览器;
在远古时期还没有 CORS;
为了向这类场景妥协;
于是就有了简化授权;
在写本文的时候我没找到一个合适的简化授权的示例网站;
于是我这里在本地创建了一个 oauth 项目;
项目链接是 http://oauth.test

拼接链接

和简化授权一样;
第一步都是拼接链接;
请求方式: GET
请求链接: http://oauth.test/oauth/authorize
并拼接携带以下参数:

response_type=token
client_id: xxx
redirect_uri: 
scope: 
state: xxx

response_type 固定参数这里就是 token ;
client_id 在平台申请的 key;
redirect_uri 是当授权后的回跳链接;
scope 要申请的权限;
state 随机生成的一个字符串是为了安全;
完整的链接就是这样的了: http://oauth.test/oauth/authorize?response_type=token&client_id=xxx&redirect_uri=http%3A%2F%2Foauth.test%2Fauth%2Fcallback&scope=&state=xxx

获取 token

当访问上一步拼接好的链接时;
如果没有登录的话会先被重定向到登录页面;

登录过后会显示授权页面;

授权后重定向到回跳链接;

http://oauth.test/auth/callback#access_token=xxx&token_type=Bearer&expires_in=31622400
token_type 是 token 类型一般是 Bearer ;
expires_in 过期时间
access_token 用于获取用户信息的令牌

我们可以看到这里直接获取到了 access_token ;

总结

我们跟授权码对比可以发现;
简化模式没有获取 code 的步骤;
整个过程我们只传递了 client_id ;
但是并没有传递 client_secret ;
那么也就无法验证 client 的真实性;
简化模式没有授权码模式安全;
获得的 token 只有 access_token 没有 refresh token;
而且 access_token 的过期时间设置的比较短;
因此现在不建议使用简化模式;

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共1条评论
白俊遥博客

睡着了白俊遥博客

2019-06-12 22:08:39 回复