我一直在使用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} - 为...创建单例实例 org.wso2.carbon.identity.auth.service.handler.HandlerManager TID: [-1234] [] [2018-04-06 11:34:38,200]调试 {org.wso2.carbon.identity.auth.service.handler.HandlerManager} - 获取 给定处理程序列表的第一优先级处理程序TID:[ - 1234] [] [2018-04-06 11:34:38,200]调查 {org.wso2.carbon.identity.auth.service.handler.HandlerManager} - 获取 优先处理程序: DefaultAuthenticationManager(org.wso2.carbon.identity.auth.service.AuthenticationManager) TID:[ - 1234] [] [2018-04-06 11:34:38,205] DEBUG {org.wso2.carbon.identity.oauth2.OAuth2Service} - 访问令牌 收到的客户ID EjQvbCf0pclp6eVO5lxTq23_lxQa,用户ID userldap,范围:[openid,email]和授权类型:密码TID: [-1234] [] [2018-04-06 11:34:38,205]调试 {} org.wso2.carbon.identity.oauth2.token.handlers.clientauth.AbstractClientAuthHandler - 可以使用客户端ID和密码进行身份验证。客户ID:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,205]调试 {} org.wso2.carbon.identity.oauth2.token.handlers.clientauth.AbstractClientAuthHandler - 授权类型:密码严格客户端验证设置为:null TID:[ - 1234] [] [2018-04-06 11:34:38,206] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 客户 凭证是从数据库中提取的。 TID:[ - 1234] [] [2018-04-06 11:34:38,206]调查 {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 成功 使用客户端ID验证客户端:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,207]调试 {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - Oauth App 消费者密钥验证成功:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,209] DEBUG {} org.wso2.carbon.identity.governance.listener.IdentityMgtEventListener - 在IdentityMgtEventListener TID中调用Pre身份验证器:[ - 1234] [] [2018-04-06 11:34:38,210] DEBUG {} org.wso2.carbon.identity.claim.metadata.mgt.dao.CacheBackedLocalClaimDAO - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,210] DEBUG {} org.wso2.carbon.identity.claim.metadata.mgt.DefaultClaimMetadataStore - 分配的映射属性:ref来自用户存储域:PRIMARY用于声明:租户中的http://wso2.org/claims/identity/accountDisabled :-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,215]调试 {} org.wso2.carbon.identity.claim.metadata.mgt.dao.CacheBackedLocalClaimDAO - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {} org.wso2.carbon.identity.governance.listener.IdentityMgtEventListener - 在IdentityMgtEventListener TID中调用post get user claim values:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {org.wso2.carbon.identity.core.util.IdentityUtil} - 同时出错 读取用户存储属性CaseInsensitiveUsername。考虑为 区分大小写。 TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {} org.wso2.carbon.identity.governance.store.InMemoryIdentityDataStore - 从用户的缓存加载UserIdentityClaimsDO:带声明的userldap:{} TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {} org.wso2.carbon.identity.recovery.handler.AdminForcedPasswordResetHandler - 处理事件:PRE_AUTHENTICATION TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {} org.wso2.carbon.identity.recovery.handler.AdminForcedPasswordResetHandler - PreAuthenticate - 用户的AdminForcedPasswordResetHandler:userldap@carbon.super TID:[ - 1234] [] [2018-04-06 11:34:38,215] DEBUG {org.wso2.carbon.identity.core.util.IdentityUtil} - 同时出错 读取用户存储属性CaseInsensitiveUsername。考虑为 区分大小写。 TID:[ - 1234] [] [2018-04-06 11:34:38,216] DEBUG {} org.wso2.carbon.identity.recovery.handler.AccountConfirmationValidationHandler - PreAuthenticate TID:[ - 1234] [] [2018-04-06 11:34:38,216] DEBUG {org.wso2.carbon.identity.claim.metadata.mgt.dao.CacheBackedLocalClaimDAO} - 租户的本地索赔清单的缓存命中:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,217] DEBUG {} org.wso2.carbon.identity.claim.metadata.mgt.DefaultClaimMetadataStore - 分配的映射属性:来自用户存储域的accountLock:用于声明的PRIMARY:http://wso2.org/claims/identity/accountLocked in 承租人:-1234 TID:[ - 1234] [] [2018-04-06 11:34:38,218]调查 {} 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 {} org.wso2.carbon.identity.governance.store.InMemoryIdentityDataStore - 从用户的缓存加载UserIdentityClaimsDO:带声明的userldap:{} TID:[ - 1234] [] [2018-04-06 11:34:38,218] DEBUG {} org.wso2.carbon.identity.application.common.processors.RandomPasswordProcessor - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11:34:38,222]调试 {} org.wso2.carbon.identity.governance.listener.IdentityMgtEventListener - 在IdentityMgtEventListener TID中调用post authenticator:[ - 1234] [] [2018-04-06 11:34:38,222] DEBUG {} org.wso2.carbon.identity.application.common.processors.RandomPasswordProcessor - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11:34:38,223]调试 {} org.wso2.carbon.identity.application.common.processors.RandomPasswordProcessor - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11:34:38,223]调试 {} org.wso2.carbon.identity.oauth2.token.handlers.grant.PasswordGrantHandler - 收到密码授权类型的令牌请求。用户名:userldap@carbon.superScope:email openid,身份验证状态: true TID:[ - 1234] [] [2018-04-06 11:34:38,223] DEBUG {} org.wso2.carbon.identity.oauth.callback.OAuthCallbackHandlerRegistry - 找到了回调的OAuthCallbackHandler。类名:org.wso2.carbon.identity.oauth.callback.DefaultCallbackHandler 资源所有者:userldap@carbon.super客户端ID: EjQvbCf0pclp6eVO5lxTq23_lxQa范围:电子邮件openid TID:[ - 1234] [] [2018-04-06 11:34:38,223]调查 {} org.wso2.carbon.identity.oauth.callback.OAuthCallbackHandlerRegistry - 找到了回调的OAuthCallbackHandler。类名:org.wso2.carbon.identity.oauth.callback.DefaultCallbackHandler 资源所有者:userldap@carbon.super客户端ID: EjQvbCf0pclp6eVO5lxTq23_lxQa范围:电子邮件openid TID:[ - 1234] [] [2018-04-06 11:34:38,223]调查 {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 已添加 OAuthTokenReqMessageContext到threadlocal TID:[ - 1234] [] [2018-04-06 11:34:38,223]调查 {org.wso2.carbon.identity.core.util.IdentityUtil} - 同时出错 读取用户存储属性CaseInsensitiveUsername。考虑为 区分大小写。 TID:[ - 1234] [] [2018-04-06 11:34:38,223] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - SP智能令牌 到期时间功能适用于租户ID:-1234和消费者密钥: EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,224]调试 {} org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler - 为应用程序启用服务提供商特定的到期时间: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 {org.wso2.carbon.identity.core.util.IdentityUtil} - 读取用户存储属性CaseInsensitiveUsername时出错。考虑为区分大小写。 TID:[ - 1234] [] [2018-04-06 11:34:38,230]调试 {} org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler - 无限生命周期访问令牌e88de89f-70d4-33d5-b447-5cd0135fd682在缓存中找到TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - 清除 OAuthTokenReqMessageContext TID:[ - 1234] [] [2018-04-06 11:34:38,230] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - 发给客户端ID的访问令牌:EjQvbCf0pclp6eVO5lxTq23_lxQa 用户名:userldap@carbon.super和范围:email openid TID: [-1234] [] [2018-04-06 11:34:38,230]调查 {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - 发行 客户端的ID令牌:EjQvbCf0pclp6eVO5lxTq23_lxQa TID:[ - 1234] [] [2018-04-06 11:34:38,230]调查 {} org.wso2.carbon.identity.application.common.processors.RandomPasswordProcessor - 找不到随机密码容器TID的缓存密钥:[ - 1234] [] [2018-04-06 11:34:38,232]调试 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 加载AdministradorOmnicanalidad TID的基本应用程序数据:[ - 1234] [] [2018-04-06 11:34:38,232] DEBUG {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - ApplicationID:21 ApplicationName:AdministradorOmnicanalidad UserName:userldap TenantDomain:carbon.super TID:[ - 1234] [] [2018-04-06 11:34:38,232]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请客户21 TID:[ - 1234] [] [2018-04-06 11:34:38,233]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请步骤21 TID:[ - 1234] [] [2018-04-06 11:34:38,236]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请的索赔映射21 TID:[ - 1234] [] [2018-04-06 11:34:38,237]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读应用程序的角色映射21 TID:[ - 1234] [] [2018-04-06 11:34:38,241] DEBUG {org.wso2.carbon.identity.core.util.IdentityUtil} - 读取用户存储属性CaseInsensitiveUsername时出错。考虑为区分大小写。 TID:[ - 1234] [] [2018-04-06 11:34:38,241] DEBUG {org.wso2.carbon.identity.oauth2.dao.TokenMgtDAO} - 检索tokenId的访问令牌:e88de89f-70d4-33d5-b447-5cd0135fd682,标志为includeExpired:false TID:[ - 1234] [] [2018-04-06 11:34:38,244] DEBUG {org.wso2.carbon.identity.openidconnect.DefaultIDTokenBuilder} - 使用颁发者https://localhost:9445/oauth2/token主题userldap ID 令牌生存时间3600当前时间1523032478 Nonce Value null 签名算法RS256 TID:[ - 1234] [] [2018-04-06 11:34:38,244] DEBUG {org.wso2.carbon.identity.openidconnect.SAMLAssertionClaimsCallback} - 将用户userldap@carbon.super的声明添加到id令牌。 TID: [-1234] [] [2018-04-06 11:34:38,247] DEBUG {org.wso2.carbon.identity.openidconnect.SAMLAssertionClaimsCallback} - 在缓存中找不到用户属性。试图检索属性 user 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 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - ApplicationID:21 ApplicationName:AdministradorOmnicanalidad UserName:userldap TenantDomain:carbon.super TID:[ - 1234] [] [2018-04-06 11:34:38,251]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请客户21 TID:[ - 1234] [] [2018-04-06 11:34:38,251]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请步骤21 TID:[ - 1234] [] [2018-04-06 11:34:38,255]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读申请的申请表格21 TID:[ - 1234] [] [2018-04-06 11:34:38,256]调查 {} org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl - 阅读应用程序21的角色映射
如果有人可以指出我错过了什么,或者我还能尝试什么,这将是一个很大的帮助。
感谢。
答案 0 :(得分:2)
是否有任何具体原因为OIDC编写自定义声明处理程序?
如果您想通过OIDC获得自定义声明,请执行以下步骤。
转到管理控制台 - &gt;声明 - &gt;添加 - >添加外部声明 - &gt;选择方言URI为http://wso2.org/oidc/claim,将自定义声明URI作为外部声明URI,映射相应的当地主张。
在OIDC方言下成功添加自定义声明后,您必须在openid范围内的注册表中提及新添加的自定义声明URI。路径如下所示。 注册表 - &gt;浏览 - &gt; / _ system / config / oidc,然后单击属性的“添加”按钮。在那里你可以看到范围值。
答案 1 :(得分:1)
声明处理程序作为身份验证框架中身份验证过程的一部分,位于Identity Server中。
使用授权授予类型时,将通过身份验证框架处理用户身份验证。这也意味着将使用自定义声明处理程序添加/修改的任何声明。
但是,当您使用密码授予类型时,用户身份验证和声明检索将通过用户所在的相应用户存储进行。由于此身份验证不会通过身份验证框架进行,因此您的自定义声明处理程序将不会使用。