在 Oauth.io 中的服务器端身份验证期间出现“无效格式”错误

Posted

技术标签:

【中文标题】在 Oauth.io 中的服务器端身份验证期间出现“无效格式”错误【英文标题】:Getting "Invalid format" error during server side auth in Oauth.io 【发布时间】:2015-10-16 04:46:33 【问题描述】:

我有一个 javascript 客户端和一个 laravel 后端,我正在使用 Oauth.IO 进行社交身份验证。我按照这里指定的步骤操作:http://docs.oauth.io/#authorizing-the-user-with-both-front-end-and-back-end-sdks

我通过调用generateStateToken() 方法成功获得了状态令牌,但是当我将它发送到$this->oauth->auth() 方法时,我得到Invalid Format 错误。你能告诉我这个错误是什么意思吗?我做错了什么。

客户端

var selectedAuth = 'facebook';
$.post('http://localhost/auth/v1/social', provider: selectedAuth, get_state_token: 1, function(data)
    OAuth.popup(selectedAuth)
    .done(function(result) 
        console.log(result);
        $.post('http://localhost/auth/v1/social', provider: selectedAuth, code: data.token, access_token: result.access_token, function(data)
            console.log(data);
        , 'json');
    )
    .fail(function (err) 
        //handle error with err
    );
, 'json');

服务器端

// code to get the state token in a different method
$token = $this->oauth->generateStateToken();
return response()->json(['status' => 'success', 'token' => $token]);

-- 剪断--

// code to get access token from state token in another method
$provider = 'facebook';
$request_object = $this->oauth->auth($provider, array(
    'code' => $code
));
$credentials = $request_object->getCredentials();

我已验证$code 确实具有我在第一步中收到的确切状态令牌。 $credentials的值如下:

"status":"error","data":"code":"Invalid format","refreshed":false

请帮帮我。 facebook 和 twitter 也会出现此错误。如果您需要更多详细信息,请告诉我。

【问题讨论】:

【参考方案1】:

我真的很抱歉发布这个问题。我错过了文档中的一步。我把这个问题留在这里作为其他人的参考,以防其他人面临同样的问题。

错误出现在我的 javascript 代码中。在调用Oauth.popup() 时,我需要传递状态令牌并获取应该传递给服务器的代码。我直接将状态令牌发送到服务器而不是代码。

正确的代码是这样的:

var selectedAuth = 'facebook';
$.post('http://localhost/auth/v1/social', provider: selectedAuth, get_state_token: 1, function(data)
    OAuth.popup(selectedAuth, 
        state: data.token
    )
    .done(function(result) 
        console.log(result);
        $.post('http://localhost/auth/v1/social', provider: selectedAuth, code: result.code, access_token: result.access_token, function(data)
             console.log(data);
        , 'json');
    )
    .fail(function (err) 
        //handle error with err
    );
 , 'json');

【讨论】:

以上是关于在 Oauth.io 中的服务器端身份验证期间出现“无效格式”错误的主要内容,如果未能解决你的问题,请参考以下文章

强制Chrome在TLS期间发送链中的所有证书

如何在 blazor webassembly 项目中对服务器端控制器中的用户进行身份验证?

具有无状态服务器且无服务器端呈现的 cookie 中的 JWT 身份验证

Firebase Listener 在某些用户通过电话身份验证登录期间不起作用

身份验证后重定向期间请求挂起

请求在身份验证后重定向期间挂起