как сопоставить заявку, поступающую от поставщика удостоверений, с группой ролей в Keycloak?

#keycloak #oidc-identity-brokering

#keycloak #oidc-посредничество при идентификации

Вопрос:

Я пытаюсь выполнить посредничество с идентификацией с помощью Keycloak. От поставщика удостоверений поступают очень подробные утверждения. Теперь я хочу сопоставить значение из одного из утверждений с группой ролей в Keycloak. Есть ли способ добиться этого?

Спасибо

Комментарии:

1. Что вы подразумеваете под «сопоставлением [значения] утверждения»? Не могли бы вы описать на примере?

2. @roxch Говорят, что от поставщика удостоверений поступают заявки { "ver": 1, "jti": "AT.bfekt0S96atew6s-xxxx", "iss": "https://abc.xyz.com/oauth2/default", "aud": "api://default", "iat": 1600681570, "exp": 1600685170, "cid": "0oawtxxmtyxxxxx", "uid": "00uynldf5fxxxxxx", "scp": [ "openid" ], "sub": "designer@xyz.com", "someClaim": "designer", "claimsByGroup": [ "Everyone", "developers" ] } , и я хочу назначить пользователю группу ролей в токене Keycloak для некоторых запросов , поступающих от поставщика удостоверений.

3. Это все еще неоднозначно! вы хотите добавить пользователя в группу в KC Administration, использующую данные из someClaim? Или пользователь уже состоит в группе, и вы хотите добавить информацию о группе к указанному выше токену (для дальнейшего использования / проверки)?

4. вы хотите добавить пользователя в группу в KC Administration, использующую данные из someClaim? ДА.

Ответ №1:

Хорошо, для этой цели вам нужно использовать интерфейс командной строки администратора, более конкретно Групповые операции, для автоматизации которых в этом случае требуются некоторые пользовательские сценарии. Ознакомьтесь с документами, приведенными выше, и посмотрите, как вы можете настроить ut. Это будет что-то вроде этого:

 !#/bin/bash
...
# init stuff for kc-admin.sh 
...
# assuming you've given the claim form IdP as 1st param to this script
claim="$1"


# use jq¹ to filter someClaim from JSON
role=${echo $claim | jq -r '.someClaim'}
username=${echo $claim | jq -r '.sub'}

# find out the user and group ids (not sure if this works, but there's possibilities²!)
user_id=${kcadm.sh get users -r yourrealm -q username=$username}
group_id=${kcadm.sh get groups -r yourrealm}

kcadm.sh update users/$user_id/groups/$group_id -r yourrealm -s realm=yourrealm -s userId=$user-id -s groupId=$group_id -n

  
  1. jq
  2. Список пользователей