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

Keycloak KeyClope是否提供用户注册API以从客户端应用程序注册用户?,keycloak,Keycloak,我想为我的用户提供一个到KC注册过程的链接,而不是他们必须通过“登录”页面并遵循链接。 (最终,我想在链接中提供他们的用户id,但这是为了另一个问题:-) 似乎我无法直接链接到: /auth/realms/my relm/login actions/registration?client\u id=my client&tab\u id=D92kNju2J1M 看起来KC需要启动一个“会话”并将选项卡id附加到URL 我已尝试使用此链接: /auth/realms/my realm/protoco

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

似乎我无法直接链接到:

/auth/realms/my relm/login actions/registration?client\u id=my client&tab\u id=D92kNju2J1M

看起来KC需要启动一个“会话”并将选项卡id附加到URL

我已尝试使用此链接:

/auth/realms/my realm/protocol/openid connect/registrations?response\u type=code&client\u id=my client&login=true&scope=openid

但是我在使用SAML时遇到了“错误协议”错误

有人知道怎么做吗

谢谢,
Stuart

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

从“querystring”导入querystring;
....
....
const adminCredential=()=>{
返回querystring.stringify({
用户名:process.env.keydove\u ADMIN\u用户名,
密码:process.env.keydove\u ADMIN\u密码,
客户端id:process.env.keydape\u ADMMIN\u客户端id,
授权类型:“密码”
});
};
export const createUserHandler=async(userParams,回调)=>{
常量keydeposeparams={
用户名:userParams.username,
电子邮件:userParams.email,
lastName:userParams.lastName,
firstName:userParams.firstName,
电子邮件验证:错误,
启用:false,
属性:{
国家:userParams.country,
电话:假,
emailVerificationCode:randomSixDigitNumber(),
用户角色:“用户”,
阿瓦塔鲁尔
},
证书:[
{
键入:“密码”,
值:userParams.password,
临时:错
}
]
};
试一试{
常数{
数据:{access_token}
}=等待KCAuthRestClient(adminCredential());
const{code,data,status}=wait KCUserCreateRestClient({
访问令牌,
数据:keydapertarams
}); 
}捕获(错误){
控制台错误(错误)
}
const axios=require('axios');
const{keydape_URL}=require(../API”);
export const KCUserCreateRestClient=async({data,access_token})=>{
const url=`${keydape_url}/auth/admin/realms/${REALM}/users`
常量配置={
标题:{
授权:`Bearer${access\u token}`
}
};
试一试{
const response=wait axios.post(url、数据、配置);
const userId=response.headers.location.split(`${url}/`)[1]
返回等待{
代码:response.status,
状态:response.statusText,
数据:{id:userId}
}
}捕获(错误){
返回{
状态代码:error.response.status,
状态:error.response.statusText
}
}
}