📅  最后修改于: 2023-12-03 14:54:21.603000             🧑  作者: Mango
当您使用OAuth2.0协议来保护您的API时,您需要确保您的API能够验证访问令牌的有效性。如果您的API被设计为使用JWT令牌,则只需验证签名即可。但是有些API不会使用JWT令牌而是使用普通的访问令牌。在这种情况下,您需要利用OAuth2.0中的Introspection Endpoint来验证令牌的有效性。
如果您的API未设置权威或Introspection Endpoint,则可能会出现以下错误:"您必须设置权威或IntrospectionEndpoint"
。
为了解决此问题,您需要按照以下步骤完成API的设置:
首先,确保您的API运行在受信任的网络上。如果您的API运行在公共网络上,那么您必须谨慎处理令牌的验证,以确保API的安全性。
在您的API中设置权威或Introspection Endpoint。Introspection Endpoint是一个能够识别和验证令牌的端点。您需要将其添加到您的API以便 API能够验证访问令牌的有效性。以下是一些示例:
security.oauth2.resource.introspection-uri = https://authserver.com/oauth/check_token
security.oauth2.resource.user-info-uri = https://authserver.com/oauth/user_info
const express = require('express')
const oauthserver = require('oauth2-server')
const app = express()
const requestAuthenticateHandler = (request, response, next) => {
try {
const result = app.oauth.authenticate(request, response)
// Continue with next middleware or route handler
} catch(err){
// Handle authentication errors
}
}
app.use('/api', requestAuthenticateHandler)
$server = new \League\OAuth2\Server\AuthorizationServer();
$server->setTokenValidator(new \League\OAuth2\Server\ResourceValidators\BearerTokenValidator());
$server->setAccessTokenRepository(new \League\OAuth2\Server\Repositories\AccessTokenRepository());
$server->setScopeRepository(new \League\OAuth2\Server\Repositories\ScopeRepository());
$server->setClientRepository(new \League\OAuth2\Server\Repositories\ClientRepository());
$server->setAuthCodeRepository(new \League\OAuth2\Server\Repositories\AuthCodeRepository());
$server->setRefreshTokenRepository(new \League\OAuth2\Server\Repositories\RefreshTokenRepository());
$middleware = new \League\OAuth2\Server\Middleware\ResourceServerMiddleware();
$middleware->setResourceServer(new \League\OAuth2\Server\ResourceServer(
$server->getAccessTokenRepository(),
$server->getPublicKey(),
$server->getScopeRepository(),
'file://path/to/private.key',
$server->getAuthorizationServer()->getTokenType()
));
测试您的API以确保它能够正确地验证访问令牌的有效性。可以使用Postman等API测试工具来测试API。
如果您遵循上述步骤,则您的API现在能够正确地验证访问令牌的有效性,并且不再出现错误信息:“您必须设置权威或IntrospectionEndpoint”。