我正在使用Laravel 5.5版并使用Passport进行身份验证。 我使用以下方法创建了令牌:
$token = $user->createToken('string')->accessToken;
它生成带有1075个字符的令牌,其中'oauth_access_tokens'
表中的条目具有 80个字符的标识。
如何使用80个字符的令牌从数据库中获取1075个字符的令牌?
答案 0 :(得分:0)
我还没有找到从护照中获取 access_token 的方法,但我找到了自己生成令牌的解决方案。这是github上问题的一部分。您可以在链接中查看解决方案,希望它对我有用。
您还可以检查通行证存储库 link
中 access_token 的生成答案 1 :(得分:0)
(这是在 Laravel 8 上测试的)。
用于生成 JWT 令牌的代码可以在 League\OAuth2\Server\Entities\Traits\AccessTokenTrait
中找到。
看起来像这样:
/**
* Generate a JWT from the access token
*
* @return Token
*/
private function convertToJWT()
{
$this->initJwtConfiguration();
return $this->jwtConfiguration->builder()
->permittedFor($this->getClient()->getIdentifier())
->identifiedBy($this->getIdentifier())
->issuedAt(new DateTimeImmutable())
->canOnlyBeUsedAfter(new DateTimeImmutable())
->expiresAt($this->getExpiryDateTime())
->relatedTo((string) $this->getUserIdentifier())
->withClaim('scopes', $this->getScopes())
->getToken($this->jwtConfiguration->signer(), $this->jwtConfiguration->signingKey());
}
因此,为了使用 oauth_access_tokens
表中的数据重新创建您的 JWT 令牌,请使用以下代码:
$oauthClientId = 1; // CHANGE! The ID of oauth client found in "oauth_clients" table
$tokenId = "..." // CHANGE! The 80 character ID found in "oauth_access_tokens"
$clientRepository = app(\Laravel\Passport\Bridge\ClientRepository::class);
$clientEntity = $clientRepository->getClientEntity($personalAccessClientId);
$token = Token::query()->where('id', $tokenId)->firstOrFail();
$issuedAt = Carbon::createFromFormat('Y-m-d H:i:s', $token->created_at)
->toDateTimeImmutable();
$expiresAt = Carbon::createFromFormat('Y-m-d H:i:s', $token->expires_at)
->toDateTimeImmutable();
$scopes = collect($token->scopes)->map(function ($id) {
return new \Laravel\Passport\Scope($id);
})->all();
$jwtConfiguration = \Lcobucci\JWT\Configuration::forAsymmetricSigner(
new Sha256(),
LocalFileReference::file(Passport::keyPath('oauth-private.key'), ''),
InMemory::plainText('')
);
$jwtToken = $jwtConfiguration->builder()
->permittedFor($clientEntity->getIdentifier())
->identifiedBy($tokenId)
->issuedAt($issuedAt)
->canOnlyBeUsedAfter($issuedAt)
->expiresAt($expiresAt)
->relatedTo((string)$token->user_id)
->withClaim('scopes', $scopes)
->getToken($jwtConfiguration->signer(), $jwtConfiguration->signingKey());
$token = (string)$jwtToken;