当前位置: 首页 > 知识库问答 >
问题:

Laravel Passport-oauth/token提供客户端身份验证失败

牟波
2023-03-14

我已经安装了拉威尔护照。

下面是我如何生成授权代码:

public function auth(Request $request)
{
    $request->session()->put('state', $state = Str::random(40));

    $request->session()->put(
        'code_verifier', $code_verifier = Str::random(128)
    );

    $codeChallenge = strtr(rtrim(
        base64_encode(hash('sha256', $code_verifier, true))
        , '='), '+/', '-_');

    $query = http_build_query([
        'client_id' => '1',
        'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
        'response_type' => 'code',
        'scope' => '',
        'state' => $state,
        'code_challenge' => $codeChallenge,
        'code_challenge_method' => 'S256',
    ]);

    return redirect('http://127.0.0.1:9000/oauth/authorize?'.$query);
}

以上要求均通过良好。以下是我如何尝试生成访问令牌:

public function authResponse(Request $request)
{
    $state = $request->session()->pull('state');

    throw_unless(
        strlen($state) > 0 && $state === $request->state,
        InvalidArgumentException::class
    );

    $response = Http::asForm()->post('http://127.0.0.1:9000/oauth/token', [
        'grant_type' => 'authorization_code',
        'client_id' => '1',
        'client_secret' => 'hYMELQ1VKAWrG0TwrkM3JxUuoICSCWCzCztClZZi',
        'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
        'code' => $request->code,
    ]);

    return $response->json();
}

当我执行生成访问令牌的代码时,出现以下错误:

{“error”:“invalid_client”,“error_description”:“client authentication failed”,“message”:“client authentication failed”}

你知道这个错误的原因是什么吗?我从数据库中获取了client\u secret

知道是什么问题吗?我该如何解决它?

共有1个答案

令狐晟
2023-03-14

您缺少从会话中提取authResponse()方法上的code\u验证器。

$codeVerifier = $request->session()->pull('code_verifier');

然后,在将授权码转换为访问令牌时,将$codeVerifier添加到'code\u verifier'in post方法中。

$response = Http::asForm()->post('http://127.0.0.1:9000/oauth/token', [
        'grant_type' => 'authorization_code',
        'client_id' => '1',
        'client_secret' => 'hYMELQ1VKAWrG0TwrkM3JxUuoICSCWCzCztClZZi',
        'redirect_uri' => 'http://127.0.0.1:8000/authorize/response',
        'code' => $request->code,
    ]);

查看有关这方面的文档。

 类似资料:
  • 我为我的英语道歉。我提出了以下问题。我在与C#asp合作。NETMVC5。 我正在使用OAuth 2承载令牌和令牌刷新实现一个服务器。请求访问令牌时,返回我刷新令牌和具有客户端凭据授权类型、客户端id和客户端机密的令牌。问题是应用来自令牌的新刷新令牌。当我发送grant_类型refresh_token和refresh_token参数时,第一个方法称为ValidateClientAuthentica

  • 我正在组装一个soap客户端来调用第三方soap服务。我在连接Java时遇到问题。它在SoapUI上运行良好。这是我第一次在应用程序中设置密钥库。我发现的所有代码都是相同的,非常简单,但我不明白为什么java版本不起作用。。我使用的是该公司提供的TLS pfx文件,我也在尝试连接该公司的服务。我要从服务器上拿回403。。这是密码 非常感谢任何对我错误的帮助... 不确定是否重要,但服务器是一个.

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一