📌  相关文章
📜  您必须设置权威或 IntrospectionEndpoint" (1)

📅  最后修改于: 2023-12-03 14:54:21.603000             🧑  作者: Mango

您必须设置权威或 IntrospectionEndpoint

当您使用OAuth2.0协议来保护您的API时,您需要确保您的API能够验证访问令牌的有效性。如果您的API被设计为使用JWT令牌,则只需验证签名即可。但是有些API不会使用JWT令牌而是使用普通的访问令牌。在这种情况下,您需要利用OAuth2.0中的Introspection Endpoint来验证令牌的有效性。

如果您的API未设置权威或Introspection Endpoint,则可能会出现以下错误:"您必须设置权威或IntrospectionEndpoint"

为了解决此问题,您需要按照以下步骤完成API的设置:

  1. 首先,确保您的API运行在受信任的网络上。如果您的API运行在公共网络上,那么您必须谨慎处理令牌的验证,以确保API的安全性。

  2. 在您的API中设置权威或Introspection Endpoint。Introspection Endpoint是一个能够识别和验证令牌的端点。您需要将其添加到您的API以便 API能够验证访问令牌的有效性。以下是一些示例:

    • Java应用程序:使用Spring Security的OAuth2.0插件自动设置权威,使用Spring框架构建的API可以很容易地使用此插件。
    security.oauth2.resource.introspection-uri = https://authserver.com/oauth/check_token
    security.oauth2.resource.user-info-uri = https://authserver.com/oauth/user_info
    
    • Node.js应用程序:使用oauth2-server库自动设置权威。
    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)
    
    • PHP应用程序:使用thephpleague/oauth2-server库自动设置权威。
    $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()
                        ));
    
  3. 测试您的API以确保它能够正确地验证访问令牌的有效性。可以使用Postman等API测试工具来测试API。

如果您遵循上述步骤,则您的API现在能够正确地验证访问令牌的有效性,并且不再出现错误信息:“您必须设置权威或IntrospectionEndpoint”。