请大神指导一下 yii2 的yii2 oauth2 server什么玩

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
网上教程零零碎碎,很多没讲到重点,github歪果仁写的东西看不太懂,求各位指点。。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以看下这个,其实可以追踪一下源码, 明白时候就会觉得挺简单的
下面这个是利用 yii2-authclient 一些具体的实现
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
来源:博客园
原文转自 /ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展。因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案。在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server。这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2 Server 扩展,需要进行一些必要的整合操作,主要是编写一个类来接受 client 访问和颁发 access_token 等。 第一部分: 数据库准备 OAuth2-Server-php
使用的数据库结构采用 Github 上的 oauth2-server-php README.md 提供的表结构(Schema),一共有五张表: mysql> +--------------------------+ | Tables_in_oauth2
| +--------------------------+ | oauth_access_token
| | oauth_authorization_code | | oauth_client
| | oauth_refresh_token
| +--------------------------+ 5 rows in set (0.00 sec) 各表的名字说明了表中存取的内容,表名可自定义,自定义位置为:OAuth2/Storage/Pdo.php 48行的 config 数组中,因为这里采用的是 mysql 数据库,所以需要修改的是 Pdo,若是采用其它的存储方案,如 Redis,则自行修改对应文件即可。注意这里的数据库名称是都是单数形式。 使用以下 sql 语句创建这5个表,并添加一个测试 client: ############################### ### oauth2 tables ############################### drop table if exists `oauth_client`; drop table if exists `oauth_access_token`; drop table if exists `oauth_authorization_code`; drop table if exists `oauth_refresh_token`; drop table if exists `user`; CREATE TABLE `oauth_client` ( `client_id` VARCHAR(80) NOT NULL, `client_secret` VARCHAR(80) NOT NULL, `redirect_uri` VARCHAR(2000) NOT NULL, CONSTRAINT client_id_pk PRIMARY KEY (client_id) ); CREATE TABLE `oauth_access_token` ( `access_token` VARCHAR(40) NOT NULL, `client_id` VARCHAR(80) NOT NULL, `user_id` VARCHAR(255), `expires` TIMESTAMP NOT NULL, `scope` VARCHAR(2000), CONSTRAINT access_token_pk PRIMARY KEY (access_token) ); CREATE TABLE `oauth_authorization_code` ( `authorization_code` VARCHAR(40) NOT NULL, `client_id` VARCHAR(80) NOT NULL, `user_id` VARCHAR(255), `redirect_uri` VARCHAR(2000), `expires` TIMESTAMP NOT NULL, `scope` VARCHAR(2000), CONSTRAINT auth_code_pk PRIMARY KEY (authorization_code) ); CREATE TABLE `oauth_refresh_token` ( `refresh_token` VARCHAR(40) NOT NULL, `client_id` VARCHAR(80) NOT NULL, `user_id` VARCHAR(255), `expires` TIMESTAMP NOT NULL, `scope` VARCHAR(2000), CONSTRAINT refresh_token_pk PRIMARY KEY (refresh_token) ); -- CREATE TABLE `user` ( `user_id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(255) NOT NULL, `password` VARCHAR(2000), `first_name` VARCHAR(255), `last_name` VARCHAR(255), CONSTRAINT user_pk PRIMARY KEY (user_id) ); -- test data INSERT INTO oauth_client (client_id, client_secret, redirect_uri) VALUES ("testclient", "testpass", "http://fake/"); INSERT INTO user (username, password, first_name, last_name) VALUES ('rereadyou', '8551be07bab21fd411e43b78dbcc', 'bo', 'zhang'); 第二部分: 认证方案及实现 OAuth2 RFC 6749 规范提供了四种基本认证方案,以下针对这四种认证方案以及它们在本实现中的使用方式进行分别说面。 第一种认证方式: Authorization Code Grant (授权码认证) 授权码通过使用授权服务器做为客户端与资源所有者的中介而获得。客户端不是直接从资源所有者请求授权,而是引导资源所有者至授权服务器(由在RFC2616中定义的用户代理),授权服务器之后引导资源所有者带着授权码回到客户端。 在引导资源所有者携带授权码返回客户端前,授权服务器会鉴定资源所有者身份并获得其授权。由于资源所有者只与授权服务器进行身份验证,所以资源所有者的凭据不需要与客户端分享。 授权码提供了一些重要的安全益处,例如验证客户端身份的能力,以及向客户端直接的访问令牌的传输而非通过资源所有者的用户代理来传送它而潜在暴露给他人(包括资源所有者)。 授权码许可类型用于获得访问令牌和刷新令牌并未机密客户端进行了优化。由于这是一个基于重定向的流程,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互并能够接收来自授权服务器的传入请求(通过重定向)。 Authorization Code Grant 过程(又称为 Web Server Flow) 参见如下: +----------+ | Resource | |
| +----------+ ^ | (B) +----|-----+
Client Identifier
+---------------+ |
+----(A)-- & Redirection URI ---->|
| Authorization | |
+----(B)-- User authenticates --->|
+----(C)-- Authorization Code ------(D)-- Authorization Code ---------'
& Redirection URI
| Authorization | |
|----(B)-- User authenticates -->|
|<---(C)--- Redirection URI ----|
Web-Hosted
without Fragment
|--(B)---- Resource Owner ------->|
Password Credentials
| Authorization | | Client
|--(A)- Client Authentication --->| Authorization | | Client
| true 来开启颁发新的 refresh_token。 Tips: IETF rfc2649 中对于 refresh_token section 的部分说明, POST /token HTTP/1.1 Host:
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA 需要提供客户端的 client_id 和 client_secret, grant_type 值必须是 refresh_token。 access_token 有效期内不能使用 refresh_token 换取新的 access_token。 2. 使用 access_token: a. client app 使用 access_token 获取 resource 信息。 oauth2-server 验证 access_token: curl /oauth2/index.php?r=oauth2/verifytoken -d 'access_token=aea4add5e4117bedd6e07ccc3f402' 返回: {"result":"success", "message":"your access token is valid." }
这个部分只是为了验证 access token 的有效性,client app 并不应该直接调用该方法,而是在请求资源时有server自行调用,根据判断结果进行不同处理。 可以在 Oauth2 extension 的 Server.php 中来修改 access_token 的有效期。 3. scope scope 需要服务端确定具体的可行操作。 scope 用来确定 client 所能进行的操作权限。项目中操作权限由 srbac 进行控制, Oauth2 中暂不做处理。 4. state state 为 client app 在第一步骤中获取 authorization code 时向 OAuth2 Server 传递并由 OAuth2 Server 返回的随机哈希参数。state 参数主要用来防止跨站点请求伪造(Cross Site Request Forgery, CSRF),相关讨论可参见本文最后的参考【7】和【8】。 References:
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动

我要回帖

更多关于 yii2 判断post请求 的文章

 

随机推荐