【发布时间】:2014-02-05 13:18:10
【问题描述】:
我正在使用 Restler 和 Brent Shaffer 编写的 OAuth2 模块。我想要做的是从他们发送的令牌中确定用户,在我的应用程序类中,而不仅仅是 OAuth2Server 类。
我可以看到有两种方法可以做到这一点。希望这能解释我想要做什么。
方法一: 我不是特别喜欢这种方法,但是很管用。
POST /v1/token
返回我的令牌,包括 user_id,例如
{
"access_token":"282090609b3407d981c2bea633a39739595ba426",
"expires_in":3600,
"token_type":"Bearer",
"scope":"basic",
"refresh_token":"b60a4e5f759168df857342380f3550bc120b6f9d",
"user_id": 5
}
现在客户端知道了 user_id,它和我的请求一起发送:
GET /v1/dashboard?id=5
我的 __isAllowed 方法负责检查用户是否没有更改 id,请求不属于他们的信息。
public function __isAllowed() {
$token = static::$server->getAccessTokenData(Request::createFromGlobals());
return (($token['user_id'] > 0) && ($token['user_id'] === $_GET['id']) && ($token['group_id'] == self::$group_id));
}
仪表板类如下所示:
/*
* @version 1
* @access protected
*/
class Dashboard {
/**
* @param int $id Customer ID {@from query}
* @return type
*/
public function index($id) {
$s = Dao\ViewCustomerDaoObject::findId($id);
return array_merge($s->toJSON(), $widgets);
}
}
这就是我希望调用 API 的方式:
GET /v1/dashboard
当我提出上述要求时,将 oauth2_token 表加入我的仪表板表。我认为这可能有点小题大做,我不希望这在以后造成问题。
该信息已在 OAuth2Server 实例中可用,因为 OAuth2Server 类确实确定是否使用了正确的令牌以及它们的 user_id 是什么。
有人可以指导我处理这种情况的正确方向吗?尤其是使用 Restler?
【问题讨论】: