【问题标题】:Restler+OAuth2 - Identifying the user correctlyRestler+OAuth2 - 正确识别用户
【发布时间】: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?

【问题讨论】:

    标签: php oauth-2.0 restler


    【解决方案1】:

    其实是我自己想出来的。

    在OAuth2Server->__isAllowed方法中,必须在静态User类中设置UserId。

    public function __isAllowed() {   
        $token = static::$server->getAccessTokenData(Request::createFromGlobals());
    
        // If the user_id is valid, set static user class. 
        // *** This is not production code, add more checks here if you use this!
        if ($token['user_id'] > 0) {
            \Luracast\Restler\User::init();
            \Luracast\Restler\User::setUniqueIdentifier($token['user_id']);
            return true;
        }
        return false;
    }
    

    现在你可以通过调用来获取你类中当前经过身份验证的用户:

     \Luracast\Restler\User::getUniqueIdentifier(true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 2018-10-08
      • 2019-02-03
      • 2022-11-16
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多