找回密码
 立即注册
首页 业界区 安全 wso2~第三方IDP向wso2用户体系的同步

wso2~第三方IDP向wso2用户体系的同步

咚獭 4 天前
正常情况下,对接第三方IDP之后,在第三方IDP登录后重定向到wso2平台,然后用户就完成了初始化,并且为用户完成了默认应用的建立;如果希望在自己的用户后,手动为用户处理到wso2平台的用户同步,而不需要用户登录后再同步信息,就需要用到几个项目的用户处理流程了
添加keycloak用户到wso2

源码修改-支持kc用户id作为用户名


  • 目前不支持用户名带减号和以0开头的,目前kc-user-id是这种规则,需要把wso2-extensions/identity-governance源码稍微改一下
  • 注册注入:https://github.com/wso2-extensions/identity-governance/blob/master/components/org.wso2.carbon.identity.recovery
  • 用户名不合法及用户已存在的错误抛出,代码出版:org.wso2.carbon.identity.recovery.signup.UserSelfRegistrationManager.handleClientException()方法
  • /v1.0/me方法的程序入口:org.wso2.carbon.identity.user.endpoint.impl.MeApiServiceImpl.mePost()
  • 用户名正则校验位置:org.wso2.carbon.user.core.common.AbstractUserStoreManager.addUser()

    • org.wso2.carbon.user.core.common.AbstractUserStoreManager.checkUserNameValid()

  1. // org.wso2.carbon:org.wso2.carbon.user.core-4.9.0.jar
  2. // addUser()
  3. if (!checkUserNameValid(userStore.getDomainFreeName()) &&
  4.         !UserCoreUtil.getSkipUsernamePatternValidationThreadLocal()) {
  5.         
  6.         }
  7.         
复制代码
1.png

注释掉这个验证规则
2.png

添加用户方法调用
  1. curl \
  2.     -X POST 'https://test-apim.pkulaw.com/api/identity/user/v1.0/me' \
  3.     -H 'Content-Type: application/json' \
  4.     -H 'Authorization: Basic YWRtaW46YWRtaW4=' \
  5.     -d '{
  6.         "user": {
  7.             "username": "0007aaa6-cc4c-4428-a026-a4ddfec2c965",
  8.             "realm": "PRIMARY",
  9.             "password": "Password12!",
  10.             "claims": [
  11.                 {
  12.                     "uri": "http://wso2.org/claims/givenname",
  13.                     "value": "kim"
  14.                 },
  15.                 {
  16.                     "uri": "http://wso2.org/claims/emailaddress",
  17.                     "value": "kim.anderson@gmail.com"
  18.                 }
  19.                    {
  20.                     "uri": "http://wso2.org/claims/roles",
  21.                     "value": "Internal/subscriber "
  22.                 }
  23.             ]
  24.         }
  25.     }'
复制代码
返回下面状态,或者直接返回HTTP 201(无返回值)
  1. {
  2.   "code": "USR-02003",
  3.   "message": "Successful user self registration. Account verification not required.",
  4.   "notificationChannel": null
  5. }
复制代码

  • 操作成功的状态码是201,并且用户会自动添加下面3个角色

    • Internal/subscriber
    • Internal/everyone
    • Internal/selfsignup

  • 用户名不合法 ,返回400状态码,code为"20045"
  • 用户名已经存在,返回409状态,code为"20030"
添加应用

通过api/am/devportal/applications接口获取用户应用时,如果用户还没有建立应用,系统会为它添加一个默认的应用,这是wso2内部实现的
获取应用

模拟当前用户登录,并获取token
  1. curl \
  2.     -X POST 'https://test-apim.pkulaw.com/oauth2/token' \
  3.     -H 'Content-Type: application/x-www-form-urlencoded' \
  4.     --data-urlencode 'grant_type=password' \
  5.     --data-urlencode 'username=kim2' \
  6.     --data-urlencode 'password=Password12!' \
  7.     --data-urlencode 'scope=apim:subscribe' \
  8.     --data-urlencode 'client_id=uFZG4jF7VloJc4LEwiYIcofNb3ka' \
  9.     --data-urlencode 'client_secret=GFGPfRa961aD4M_xCL3n6I54t7Ea' \
  10.     -k
复制代码
返回
  1. {
  2.   "access_token": "9953e98a-08db-39fa-9390-63ef5cab256c",
  3.   "scope": "apim:subscribe",
  4.   "token_type": "Bearer",
  5.   "expires_in": 3600
  6. }
复制代码
获取自己的应用,如果没有应用,系统会添加一个默认应用
  1. GET        https://test-apim.pkulaw.com/api/am/devportal/applications
复制代码
返回
  1. {
  2.     "count": 1,
  3.     "list": [
  4.         {
  5.             "applicationId": "781f3363-8fdc-4c32-8ebf-0f0e8d6846d6",
  6.             "name": "tes",
  7.             "throttlingPolicy": "Unlimited",
  8.             "description": "test",
  9.             "status": "APPROVED",
  10.             "groups": [
  11.             ],
  12.             "subscriptionCount": 0,
  13.             "attributes": {
  14.             },
  15.             "owner": "0007aaa6-cc4c-4428-a026-a4ddfec2c965",
  16.             "tokenType": "DEFAULT",
  17.             "createdTime": "1767676614000",
  18.             "updatedTime": "1767676614000"
  19.         }
  20.     ],
  21.     "pagination": {
  22.         "offset": 0,
  23.         "limit": 25,
  24.         "total": 2,
  25.         "next": "",
  26.         "previous": ""
  27.     }
  28. }
复制代码
wso2是一个非常庞大的框架,单从对用户同步这块小需求,就涉及到了底层代码的修改,这个小需求,我拉取分析的项目有几个,但最终调整代码的只有carbon-kernel项目

  • carbon-apimgt
  • carbon-identity-framework
  • identity-api-server
  • identity-governance
  • carbon-kernel

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册