首页 文章

WSO2自定义声明处理程序未被调用密码grant_type

提问于
浏览
2

我一直在使用WSO2IS作为OIDC提供商 . 我已经实现了一个自定义声明处理程序,它正常工作并在WSO2收到grant_type "Authorization_code"时被调用 . 当服务提供商使用 grant_type=password 发送请求时,问题就开始了 . 在这种情况下,WSO2成功验证了用户并返回了JWT但是......没有自定义声明,因为WSO2没有调用自定义声明处理程序 .

这是我在文件 <IS_HOME>/repository/conf/identity/application-authentication.xml 中为自定义声明处理程序执行的配置,该处理程序正在为 grant_type=authorization_code 调用 .

<ClaimHandler>com.wso2.carbon.identity.custom.claim.handler.CustomClaimHandler</ClaimHandler>

这是来自WSO2的调试日志:

TID:[ - 1234] [] [2018-04-06 11:34:38,199] DEBUG - 为org.wso2.carbon创建单例实例 . identity.auth.service.handler.HandlerManager TID:[ - 1234] [] [2018-04-06 11:34:38,200] DEBUG - 先获取给定处理程序列表的优先级处理程序TID:[ - 1234] [] [2018-04-06 11:34:38,200] DEBUG - 获取第一优先级处理程序:DefaultAuthenticationManager(org.wso2 . carbon.identity.auth.service.AuthenticationManager)TID:[ - 1234] [] [2018-04-06 11:34:38,205] DEBUG - 收到的访问令牌请求客户端ID EjQvbCf0pclp6eVO5lxTq23_lxQa,用户ID userldap,范围:[openid,email]和授权类型:密码TID:[ - 1234] [] [2018-04-06 11:34:38,205] DEBUG {org.wso2.carbon.identity . oauth2.token.handlers.clientauth.AbstractClientAuthHandler} - 可以使用客户端ID和密码进行身份验证 . 客户端ID:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,205] DEBUG - 授权类型:密码严格客户端验证设置为:null TID:[ - 1234] [] [2018-04-06 11:34:38,206] DEBUG - 从数据库中提取客户端凭据 . TID:[ - 1234] [] [2018-04-06 11:34:38,206] DEBUG - 使用客户端ID成功验证客户端:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,207] DEBUG - 消费者密钥的Oauth App验证成功:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,209] DEBUG - 在IdentityMgtEventListener TID中调用Pre身份验证器:[ - 1234] [] [2018-04-06 11 :34:38,210] DEBUG - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04- 06 11:34:38,210] DEBUG - 分配的映射属性:ref来自用户存储域:PRIMARY索赔:http://wso2.org/claims/租户中的identity / accountDisabled:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG - 在IdentityMgtEventListener TID中调用post get用户声明值:[ - 1234] [] [2018 -04-06 11:34:38,215] DEBUG - 读取用户存储属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG - 来自用户的缓存的加载UserIdentityClaimsDO:带声明的userldap:{} TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG - 处理事件:PRE_AUTHENTICATION TID:[ - 1234] [] [ 2018-04-06 11:34:38,215] DEBUG - PreAuthenticate - 用户的AdminForcedPasswordResetHandler:userldap@carbon.super TID:[ - 1234] [] [2018- 04-06 11:34:38,215] DEBUG - 读取用户商店属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,216] DEBUG - PreAuthenticate TID:[ - 1234] [] [2018-04-06 11:34:38,216] DEBUG - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,217] DEBUG - 分配的映射属性:来自用户商店的accountLock域名:主张索赔:http://wso2.org/claims/identity/accountLocked in tenant:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG {org.wso2 . carbon.identity.claim.metadata.mgt.dao.CacheBackedLocalClaimDAO} - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG {org . wso2.carbon.identity.governance.listener.IdentityMgtEventListener} - 在IdentityMgtEventListener TID中调用post get user claim values:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG {org.wso2.carbon . identity.core.util.IdentityUtil} - 读取用户存储属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG - 来自用户缓存的加载UserIdentityClaimsDO:带声明的userldap:{} TID:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG - 找不到随机密码容器TID的缓存密钥:[ -1234] [] [2018-04-06 11:34:38,222] DEBUG - 在IdentityMgtEventListener TID中调用post authenticator:[ - 1234] [] [2018 -04-06 11:34:38,222] DEBUG - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04- 06 11:34:38,223] DEBUG - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11: 34:38,223] DEBUG - 收到密码授权类型的令牌请求 . 用户名:userldap@carbon.superScope:email openid,身份验证状态:true TID:[ - 1234] [] [2018-04-06 11:34:38,223] DEBUG - 找到了回调的OAuthCallbackHandler . 类名:org.wso2.carbon.identity.oauth.callback.DefaultCallbackHandler资源所有者:userldap@carbon.super客户端ID:EjQvbCf0pclp6eVO5lxTq23_lxQa范围:电子邮件openid TID:[ - 1234] [] [2018-04-06 11:34: 38,223] DEBUG - 找到了回调的OAuthCallbackHandler . 类名:org.wso2.carbon.identity.oauth.callback.DefaultCallbackHandler资源所有者:userldap@carbon.super客户端ID:EjQvbCf0pclp6eVO5lxTq23_lxQa范围:电子邮件openid TID:[ - 1234] [] [2018-04-06 11:34: 38,223] DEBUG - 将OAuthTokenReqMessageContext添加到threadlocal TID:[ - 1234] [] [2018-04-06 11:34:38,223] DEBUG - 读取用户存储属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,223] DEBUG - SP明智的令牌到期时间功能适用于租户ID: - 1234和消费者密钥:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,224] DEBUG - 服务提供商特定的到期日应用程序启用时间:EjQvbCf0pclp6eVO5lxTq23_lxQa . 应用程序访问令牌到期时间:null,用户访问令牌到期时间:null,刷新令牌到期时间:null TID:[ - 1234] [] [2018-04-06 11:34:38,224] DEBUG {org.wso2.carbon . identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} - OAuth应用程序ID:EjQvbCf0pclp6eVO5lxTq23_lxQa,访问令牌有效时间,以毫秒为单位:3600000 TID:[ - 1234] [] [2018-04-06 11:34:38,224] DEBUG - 读取用户存储属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG - 无限终身访问令牌e88de89f-70d4-33d5在缓存TID中找到-b447-5cd0135fd682:[ - 1234] [] [2018-04-06 11:34:38,230]DEBUG - 已清除OAuthTokenReqMessageContext TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG - 发给客户端ID的访问令牌:EjQvbCf0pclp6eVO5lxTq23_lxQa用户名:userldap@carbon.super和范围:email openid TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG {org . wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - 为客户发出ID令牌:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG {org.wso2.carbon.identity . application.common.processors.RandomPasswordProcessor} - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11:34:38,232] DEBUG - 加载AdministradorOmnicanalidad TID的基本应用程序数据:[ - 1234] [] [2018-04-06 11:34:38,232] DEBUG {org.wso2.carbon.identity.application.mgt.dao . impl.ApplicationDAOImpl} - ApplicationID:21应用程序nName:AdministradorOmnicanalidad用户名:userldap TenantDomain:carbon.super TID:[ - 1234] [] [2018-04-06 11:34:38,232] DEBUG {org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读应用程序客户端21 TID:[ - 1234] [] [2018-04-06 11:34:38,233] DEBUG - 阅读步骤应用程序21 TID:[ - 1234] [] [2018-04-06 11:34:38,236] DEBUG - 读取应用程序的声明映射21 TID:[ - 1234] [] [2018-04-06 11:34:38,237] DEBUG - 读取应用程序的角色映射21 TID:[ -1234] [] [2018-04-06 11:34:38,241] DEBUG - 读取用户存储属性CaseInsensitiveUsername时出错 . 考虑为区分大小写 . TID:[ - 1234] [] [2018-04-06 11:34:38,241] DEBUG - 检索tokenId的访问令牌:e88de89f-70d4-33d5-b447 -5cd0135fd682 with flag includeExpired:false TID:[ - 1234] [] [2018-04-06 11:34:38,244] DEBUG - 使用issuer https:// localhost: 9445 / oauth2 / token主题userldap ID令牌生存时间3600当前时间1523032478 Nonce值null签名算法RS256 TID:[ - 1234] [] [2018-04-06 11:34:38,244] DEBUG - 将用户userldap@carbon.super的声明添加到id令牌 . TID:[ - 1234] [] [2018-04-06 11:34:38,247] DEBUG - 在缓存中找不到用户属性 . 试图检索用户userldap@carbon.super的属性TID:[ - 1234] [] [2018-04-06 11:34:38,249] DEBUG {org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 加载AdministradorOmnicanalidad TID的基本应用程序数据:[ - 1234] [] [2018-04-06 11:34:38,251] DEBUG - ApplicationID :21 ApplicationName:AdministradorOmnicanalidad用户名:userldap TenantDomain:carbon.super TID:[ - 1234] [] [2018-04-06 11:34:38,251] DEBUG - 读取应用程序的客户端21 TID:[ - 1234] [] [2018-04-06 11:34:38,251] DEBUG - 阅读申请的步骤21 TID:[ - 1234] [] [2018-04-06 11:34:38,255] DEBUG - 阅读索赔映射申请21 TID:[ - 1234] [] [2018-04-06 11:34:38,256] DEBUG - 读取应用程序的角色映射21

如果有人可以指出我错过了什么,或者我还能尝试什么,这将是一个很大的帮助 .

谢谢 .

2 回答

  • 1

    声明处理程序作为身份验证框架中身份验证过程的一部分,驻留在Identity Server中 .

    使用授权授予类型时,将通过身份验证框架处理用户身份验证 . 这也意味着将使用自定义声明处理程序添加/修改的任何声明 .

    但是,当您使用密码授予类型时,用户身份验证和声明检索通过用户所在的相应用户存储进行 . 由于此身份验证不会通过身份验证框架进行自定义声明处理程序将不会被使用 .

  • 2

    是否有任何特定原因为OIDC编写自定义声明处理程序?

    如果您想通过OIDC获得自定义声明,可以按照以下步骤操作 .

    • 转到管理控制台 - >声明 - >添加 - >添加外部声明 - >选择方言URI为http://wso2.org/oidc/claim,将自定义声明URI作为外部声明URI,映射相应的本地声明 .

    • 在OIDC方言下成功添加自定义声明后,您必须在openid范围内的注册表中提及新添加的自定义声明URI . 路径如下所示 . 注册表 - >浏览 - > / _ system / config / oidc然后单击属性的“添加”按钮 . 在那里你可以看到范围值 .

相关问题