Keyclock에서 사용자 비밀번호를 변경하기 위한 API 호출이 있습니까?
사용자의 비밀번호를 변경하기 위한 나만의 양식을 구현하려고 합니다.Keyclock에서 사용자 비밀번호를 변경하기 위한 API를 찾았지만 설명서에는 아무것도 없었습니다.API가 있나요?
사용할 수 있습니다.PUT /auth/admin/realms/{realm}/users/{id}/reset-password
- {id}은(는) 로그인이 아닌) 키클로크 사용자 ID입니다.
다음은 샘플 본문입니다.
{ "type": "password", "temporary": false, "value": "my-new-password" }
업데이트 키 잠금 12
개발자가 이번 호에서 설명한 모든 Account Rest API를 삭제하기로 결정했기 때문에 아래 솔루션은 Keycloak 버전12 이상에서는 동작하지 않습니다.
이것을 지적해 주신 @Radivarig님 감사합니다!
Keyclock용 솔루션 11
Keycloak은 최근 이 기능을 도입했지만 아직 프리뷰 단계이기 때문에 문서화되어 있지 않습니다.
동작시키려면 , 이 기능을 유효하게 할 필요가 있습니다.account_api
매개 변수를 사용하여 키 잠금을 시작하여 기능을 수행합니다.-Dkeycloak.profile.feature.account_api=enabled
다음과 같이 합니다.
bin/standalone.sh -Dkeycloak.profile.feature.account_api=enabled
(출처 : https://www.keycloak.org/docs/latest/server_installation/index.html#profiles)
그 후 를 사용할 수 있습니다.POST /auth/realms/your-realm/account/credentials/password
http 헤더를 제공합니다.Accept: application/json
헤더에 의해 키클로크가 JSON을 수용하고 반환하는 RestAPI-Service를 사용하게 됩니다(단, 수용만 하는 기본 폼 기반 서비스가 아닌).x-www-form-urlencoded
HTML을 반환합니다.)
Request-Body로 다음과 같은 JSON을 제공합니다.
{
"currentPassword": "oldPassword",
"newPassword": "newPassword",
"confirmation": "newPassword"
}
컬이 있는 완전한 예는 다음과 같습니다.
curl --request POST 'https://path-to-your-host.com/auth/realms/your-realm/account/credentials/password' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"currentPassword": "oldPassword",
"newPassword": "newPassword",
"confirmation": "newPassword"
}'
위에서 설명한 바와 같이 이 기능은 아직 미리보기에 있으며 나중에 변경될 수 있습니다.그러니 조심해서 사용하세요!
새로운 패스워드를 수동으로 지정하는 것이 아니라, 보다 좋은 보안 프랙티스는
PUT /auth/admin/realms/{realm}/users/{id}/execute-actions-email
관리 콜"UPDATE_PASSWORD"
필요한 액션으로서.이로 인해 Keyclock은 사용자에게 이메일을 전송하여 사용자가 새로운 비밀번호를 설정하기 위한 매직링크를 제공합니다.
참고: {id}은(는) 키 잠금 사용자 ID입니다(로그인이 아닙니다).
Keycloak Admin REST API에서 제안하는 바와 같이PUT
에 요청하다.keycloakEndpoint/auth/{realm}/users/{id}/execute-actions-email
사용자에 대한 액션을 실행합니다.여기에 설명된 대로 관리자 액세스 토큰을 가져와야 합니다.
TL;DR: 웹 앱을 통해 더 나은 방법
keycloak.login({
action: "UPDATE_PASSWORD",
})
자세한 내용은 https://www.keycloak.org/docs/latest/securing_apps/ #http://https://www.keycloak.org/docs/latest/securing_apps/ 를 참조해 주세요.
:-)
#!/bin/bash
#CHANGE ADMIN PASSWORD
apt update
apt install -y curl jq
KEYCLOAK_HOST=http://127.0.0.1:8080
ADMIN_USER_OLD_PASSWORD=
ADMIN_USER_NEW_PASSWORD=
TOKEN=$(curl -s -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d "username=admin&password=$ADMIN_USER_OLD_PASSWORD&client_id=admin-cli&grant_type=password" "$KEYCLOAK_HOST/auth/realms/master/protocol/openid-connect/token" | jq -r ".access_token" ;)
ADMIN_USER_ID=$(curl -s -X GET -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json;charset=UTF-8" -H 'Accept: application/json' "$KEYCLOAK_HOST/auth/admin/realms/master/users" | jq -r '.[] | select(.username=="admin") | .id' )
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json;charset=UTF-8" -H 'Accept: application/json' "$KEYCLOAK_HOST/auth/admin/realms/master/users/$ADMIN_USER_ID/reset-password" -d "{\"type\":\"password\",\"value\":\"$ADMIN_USER_NEW_PASSWORD\",\"temporary\":false}"
constructor(
private keycloakService: KeycloakService,
) { }
onPasswordChangeButtonClick(){
this.keycloakService.login({
action: "UPDATE_PASSWORD",
});
}
암호를 변경하려면 이 방법을 시도해 보십시오.
https://github.com/keycloak/keycloak/pull/7393#issuecomment-1103532595은 도움이 되었습니다.
그러나 기본 키 잠금과 다른 형식을 사용하려면 사용자 정의 테마를 사용할 수 있는지 확인해야 합니다.
및 , OAuth 및 OpenID Connect 프로토콜은 이러한 기능을 정의하지 않으며 Keycloak도 사용자를 대신하여 이 기능을 수행할 수 없습니다.사용자의 비밀번호를 변경하거나 재설정할 수 있는 서버 간 Admin API가 있지만 GUI에서는 호출할 수 없습니다.은 Keycloak이라는 " Page하고 있습니다.http://localhost:8080/auth/realms/your-realm/account/
(예: 교환)your-realm
URL의 일부이며 사용자를 URL로 리다이렉트랜다이렉트 합니다.
, 하는 경우는, 「 」, 「 」, 「 」, 「 」의 URL 를 읽어 을 할 수 .account-service
by URL JSON (URL)http://localhost:8080/auth/realms/your-realm
언급URL : https://stackoverflow.com/questions/33910615/is-there-an-api-call-for-changing-user-password-on-keycloak
'programing' 카테고리의 다른 글
Angular.js에서 다른 사람에게 주입할 수 있는 "물건"은 무엇입니까? (0) | 2023.02.20 |
---|---|
ReactJS에서 중첩된 개체의 PropTypes를 검증하려면 어떻게 해야 합니까? (0) | 2023.02.20 |
새 Postgre 내의 필드를 수정하려면 어떻게 해야 합니까?SQL JSON 데이터형? (0) | 2023.02.20 |
__()와 esc_html_e를 사용하는 경우 (0) | 2023.02.20 |
*ALL* 워드프레스 카테고리에서 상위 카테고리 템플릿을 사용합니다. (0) | 2023.02.20 |