1

我开始在节点 js 中使用带有 oidc 的 OAuth2 服务器。Github 链接

我的目标很简单,访问作为 UserInfo 端点的 https://myserver/me。

在尝试学习如何使用服务器时,我还使用了本指南,在此处输入链接描述 我发现我可以通过向端点 /token 发送请求来创建令牌。

在配置中我添加了这段代码(完整的服务器代码如下):

{
    client_id: 'test_oauth_app',
    client_secret: 'super_secret',
    grant_types: ['client_credentials'],
    redirect_uris: [],
    response_types: [],
}

在邮递员中,我能够通过这个请求获得我的 access_token

POST /token
Headers:
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dGVzdF9vYXV0aF9hcHA6c3VwZXJfc2VjcmV0
Body:
grant_type=client_credentials&scopes=api1 

我得到这个作为回应:

{
    "access_token": "zdjmZo7_BQSIl4iK9IMcBbKffxGO-wQ3jLzzQXTlyws",
    "expires_in": 600,
    "token_type": "Bearer"
}

当我通过 /token/introspection 检查令牌时,我发现令牌等于 jti。所以我认为它实际上返回 token_id 并且我无法访问 /me 端点。

这是我使用的整个服务器示例:

const { Provider } = require('oidc-provider');
const configuration = {
        features: {
                introspection: { enabled: true },
                clientCredentials: { enabled: true },
                userinfo: { enabled: true },
                jwtUserinfo: { enabled: true },
        },
        formats: {
            AccessToken: 'jwt',
        },
        clients: [{
            client_id: 'test_oauth_app',
            client_secret: 'super_secret',
            grant_types: ['client_credentials'],
            redirect_uris: [],
            response_types: []
        }],
        scopes: ['api1']
};

const oidc = new Provider('http://localhost:3000', configuration);
oidc.proxy = true

// express/nodejs style application callback (req, res, next) for use with express apps, see /examples/express.js
oidc.callback

// koa application for use with koa apps, see /examples/koa.js
oidc.app

// or just expose a server standalone, see /examples/standalone.js
const server = oidc.listen(3000, () => {
  console.log('oidc-provider listening on port 3000, check https://localhost:3000/.well-known/openid-configuration');
});

代理设置为 true,因为我在 apache 上设置了 https 以重定向到此服务器。

我试图更改 response_types,但它需要我不想在我的场景中使用的 redirect_uri。

这是我试图这样发布的请求:

POST /me
Headers:
Content-Type: application/json
Authorization: Bearer zdjmZo7_BQSIl4iK9IMcBbKffxGO-wQ3jLzzQXTlyws

响应:

{
    "error": "invalid_token",
    "error_description": "invalid token provided"
}

有没有人有类似的问题?不幸的是,我在这里发现了几乎相同的问题, 但没有解决方案。

4

1 回答 1

2

万一有人遇到同样的问题。我能够解决它。

我没有足够的信息,也不知道 client_credentials 授权类型是做什么的。

它实际上并没有授权用户,而是一些应用程序。因此,您没有有关用户的信息,因此您无法通过 userinfo 端点获取有关用户的数据。

因此,如果您想获取有关用户的信息,您可能需要使用授权类型 authentication_code。

我找到了一个页面,其中很多东西都写得很清楚,所以如果您从 OAuth 服务器开始,您可能想尝试一下。 https://oauth2.thephpleague.com/authorization-server/auth-code-grant/

于 2020-11-02T21:12:35.063 回答