节点 oidc-provider(用于 keycloak)
node oidc-provider (for keycloak)
我正在尝试将一个基本节点 oidc-provider 应用程序用作我的 keycloak 服务器的 OIDC 提供程序。
Keycloak 正确链接到我的应用程序的登录页面。
输入用户名和密码后,我正确地转回了 keycloak。
然而,keycloak 比说 "Unexpected error when authenticating with identity provider"。
编辑:我调整了 keycloak 日志级别,现在我看到以下错误:
Failed to make identity provider oauth callback: org.keycloak.broker.provider.IdentityBrokerException: No access_token from server.
我的应用程序如下所示:
const express = require('express');
const Provider = require('oidc-provider');
const app = express();
const clients = [
{
client_id: 'my_keycloak_client',
client_secret: "<someKey>",
grant_types: ['authorization_code'],
response_types: ['code'],
redirect_uris: ['http://localhost:8080/auth/realms/master/broker/oidc/endpoint'],
token_endpoint_auth_method: 'none'
}
];
const oidc = new Provider('http://localhost:3001', {
async findById(ctx, id) {
return {
accountId: id,
async claims() { return { sub: id }; },
};
}
});
oidc.initialize({
clients: clients,
keystore: {
keys: [
{
kty:"RSA",
kid: "zid-auth key",
use: "sig",
p:"<someKey>",
q:"<someKey>",
d:"<someKey>",
e:"AQAB",
qi:"<someKey>",
dp:"<someKey>",
dq:"<someKey>",
n:"<someKey>"
}
]
}
}).then(function () {
app.use('/', oidc.callback);
app.listen(3001);
});
您必须将 token_endpoint_auth_method
配置为 keycloak 实际使用的正确方法值。如果为方法设置为 none
的客户端提供机密,oidc-provider 将无法通过客户端身份验证。
我正在尝试将一个基本节点 oidc-provider 应用程序用作我的 keycloak 服务器的 OIDC 提供程序。
Keycloak 正确链接到我的应用程序的登录页面。 输入用户名和密码后,我正确地转回了 keycloak。
然而,keycloak 比说 "Unexpected error when authenticating with identity provider"。
编辑:我调整了 keycloak 日志级别,现在我看到以下错误:
Failed to make identity provider oauth callback: org.keycloak.broker.provider.IdentityBrokerException: No access_token from server.
我的应用程序如下所示:
const express = require('express');
const Provider = require('oidc-provider');
const app = express();
const clients = [
{
client_id: 'my_keycloak_client',
client_secret: "<someKey>",
grant_types: ['authorization_code'],
response_types: ['code'],
redirect_uris: ['http://localhost:8080/auth/realms/master/broker/oidc/endpoint'],
token_endpoint_auth_method: 'none'
}
];
const oidc = new Provider('http://localhost:3001', {
async findById(ctx, id) {
return {
accountId: id,
async claims() { return { sub: id }; },
};
}
});
oidc.initialize({
clients: clients,
keystore: {
keys: [
{
kty:"RSA",
kid: "zid-auth key",
use: "sig",
p:"<someKey>",
q:"<someKey>",
d:"<someKey>",
e:"AQAB",
qi:"<someKey>",
dp:"<someKey>",
dq:"<someKey>",
n:"<someKey>"
}
]
}
}).then(function () {
app.use('/', oidc.callback);
app.listen(3001);
});
您必须将 token_endpoint_auth_method
配置为 keycloak 实际使用的正确方法值。如果为方法设置为 none
的客户端提供机密,oidc-provider 将无法通过客户端身份验证。