gpt4 book ai didi

keycloak - Keycloak 是否提供用户注册 API 以从客户端应用程序注册用户?

转载 作者:行者123 更新时间:2023-12-04 15:39:46 24 4
gpt4 key购买 nike

我想为我的用户提供一个指向 KC 注册过程的链接,而不是他们必须通过“登录”页面并点击链接。
(最终,我想在链接中提供他们的 user_id,但这是另一个问题:-))

似乎我无法直接链接到:
/auth/realms/my-relm/login-actions/registration?client_id=my-client&tab_id=D92kNju2J1M
因为看起来 KC 需要启动一个“ session ”并将 tab_id 附加到 URL。

我试过使用这个链接:
/auth/realms/my-realm/protocol/openid-connect/registrations?response_type=code&client_id=my-client&login=true&scope=openid
但是我在使用 SAML 时遇到了“错误的协议(protocol)”错误。

有人知道怎么做这个吗?

谢谢,
斯图尔特

最佳答案

这是一个很老的问题,但它可以帮助其他人,因为 Keycloak 不提供用于用户注册的专用 API,所以我使用了 admin api 来完成这项工作。这就是我设法从客户端应用程序创建用户的方式。

import querystring from "querystring";
....
....

const adminCredential = () => {
return querystring.stringify({
username: process.env.KEYCLOAK_ADMIN_USERNAME,
password: process.env.KEYCLOAK_ADMIN_PASSWORD,
client_id: process.env.KEYCLOAK_ADMMIN_CLIENT_ID,
grant_type: "password"
});
};

export const createUserHandler = async (userParams, callback) => {
const keycloakParams = {
username: userParams.username,
email: userParams.email,
lastName: userParams.lastName,
firstName: userParams.firstName,
emailVerified: false,
enabled: false,
attributes: {
country: userParams.country,
phoneVerified: false,
emailVerificationCode: randomSixDigitNumber(),
userRole: "user",
avatarUrl
},
credentials: [
{
type: "password",
value: userParams.password,
temporary: false
}
]
};


try {
const {
data: { access_token }
} = await KCAuthRestClient(adminCredential());

const { code, data, status } = await KCUserCreateRestClient({
access_token,
data: keycloakParams
});
} catch (error) {
console.error(error)
}

const axios = require('axios');
const { KEYCLOAK_URL } = require("../API");

export const KCUserCreateRestClient = async ({ data, access_token }) => {
const url = `${KEYCLOAK_URL}/auth/admin/realms/${REALM}/users`
const config = {
headers: {
Authorization: `Bearer ${access_token}`
}
};

try {
const response = await axios.post(url, data, config);
const userId = response.headers.location.split(`${url}/`)[1]
return await {
code: response.status,
status: response.statusText,
data: { id: userId }
}
} catch (error) {
return {
statusCode: error.response.status,
status: error.response.statusText
}
}
}

关于keycloak - Keycloak 是否提供用户注册 API 以从客户端应用程序注册用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com