我正在使用 Symfony 构建 API,并且添加了 OAuth 身份验证来保护 API。但是当我使用 Postman 测试 API 并尝试获取新的访问令牌时,Postman 不会通过保护身份验证器获取令牌并且不返回任何令牌并且用户未连接。
但是当我使用前端进行测试时,我访问了要连接的路由(localhost:8000/api/connect/github),然后访问这个路由来获取令牌(localhost:8000/api/access_token/github) 用户已连接我可以在这里看到令牌,但在邮递员身上看不到。
这是我用来将用户与 OAuth 连接的两条路由(在我的 SecurityController 中):
/**
* @Route("/connect/{service}", name="api_connect")
*/
public function connect(string $service): RedirectResponse
{
/** @var GithubClient $client */
$client = $this->clientRegistry->getClient($service);
return $client->redirect(['read:user', 'user:email']);
}
/**
* @Route("/access_token/{service}", name="api_access_token")
*/
public function accessToken(Request $request, string $service): JsonResponse
{
try {
return new JsonResponse(["Access Token" => $request->getSession()->get("Access Token")], 200);
} catch (IdentityProviderException $e) {
return new JsonResponse(["Error" => [
"Message" => $e->getMessage(),
"Code" => $e->getCode()
]
]);
}
}
在我的 Authenticator 中,我使用了这两种方法来获取令牌并通过 session 和 headers 传递它:
public function getCredentials(Request $request)
{
$accesstoken = $this->fetchAccessToken($this->getClient());
$request->headers->set("Access Token", $accesstoken);
return $accesstoken;
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $providerKey)
{
$request->getSession()->set("Access Token", $request->headers->get("Access Token"));
return null;
}
因此,在我的 SecurityController 的方法 accessToken 中,我尝试在请求标头中获取令牌。它应该给我这样的回报:
{ "Access Token": "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" }
但在邮递员中,它返回给我这个:
{ "Access Token": null }
所以我猜邮递员没有通过身份验证器,但我不明白为什么,你们有什么解释吗?
非常感谢