我正在使用外部OpenID Connect IDP测试wso2身份服务器。外部IDP是GLUU。
在我的测试案例中,我包含三个组成部分:
我要获取的流程是一个OpenId Connect授权代码,我的“简单Web应用程序”(类似于wso2is中的服务提供商进行配置)需要将代码写入wso2is,重定向到GLUU登录页面,获取授权代码并进行交换访问令牌的授权代码。
“简单的Web应用程序”已在wso2is中注册为服务提供者(名称为“服务提供者测试”),并且具有类型为“ OAuth / OpenId Connect Configuration”的入站身份验证配置。在此配置中,我设置了“简单Web应用程序”的回调URL,以及我的简单Web应用程序用来获取访问令牌的客户端密钥和客户端ID。
“本地和出站身份验证配置”部分中的“服务提供商测试”已设置为“我的Gluu测试IDP”为联合身份验证。
我的Gluu测试IDP是我添加到wso2is的“服务提供者”中的身份提供者的名称。我已将Gluu的证书上传到“我的Gluu测试IDP”。
在“我的Gluu测试IDP”的“联合身份验证器”部分中,我使用GLUU IDP的信息(客户端ID,机密,令牌和身份验证端点)设置了“ OAuth / OpenId Connect配置”网址回调:https://localhost:9443/commonauth
这是前提。
我第一次尝试这种情况,这是我得到的:
与此错误相关的wso2is日志为:
TID:[-1234] [] [2018-09-21 10:33:10,529]错误{org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler}-invalid_client,客户端身份验证失败(例如,未知客户端,不包括客户端身份验证或不支持的身份验证方法)。授权服务器可以返回HTTP 401(未授权)状态码,以指示支持哪些HTTP认证方案。如果客户端尝试通过授权请求头字段进行身份验证,则授权服务器务必使用HTTP 401(未授权)状态码进行响应,并包括与客户端使用的身份验证方案匹配的WWW-Authenticate响应头字段。 org.wso2.carbon.identity.application.authentication.framework.exception.AuthenticationFailedException:invalid_client,客户端身份验证失败(例如,未知客户端,不包括客户端身份验证或不支持的身份验证方法)。授权服务器可以返回HTTP 401(未授权)状态码,以指示支持哪些HTTP认证方案。如果客户端尝试通过授权请求头字段进行身份验证,则授权服务器务必使用HTTP 401(未授权)状态码进行响应,并包括与客户端使用的身份验证方案匹配的WWW-Authenticate响应头字段。 在org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.getOauthResponse(OpenIDConnectAuthenticator.java:585) 在org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.processAuthenticationResponse(OpenIDConnectAuthenticator.java:370) 在org.wso2.carbon.identity.application.authentication.framework.AbstractApplicationAuthenticator.process(AbstractApplicationAuthenticator.java:72) 在org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler.doAuthentication(DefaultStepHandler.java:488) 在org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler.handleResponse(DefaultStepHandler.java:462)处 在org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler.handle(DefaultStepHandler.java:165)上 在org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handle(DefaultStepBasedSequenceHandler.java:176)处 在org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.GraphBasedSequenceHandler.handle处(GraphBasedSequenceHandler.java:63) 在org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:131)处 在org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:157) 在org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53) 在org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doGet(CommonAuthenticationServlet.java:43) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37) 在org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 在org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) 在org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.wso2.carbon.identity.captcha.filter.CaptchaFilter.doFilter(CaptchaFilter.java:76) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:72) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:65) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:124) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:80) 在org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:91) 在org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:60) 在org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) 在org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve $ 1.invoke(CarbonTomcatValve.java:47) 在org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57) 在org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 在org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62) 在org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) 在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 在org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:637) 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1775) 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1734) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:748) 由以下原因引起:OAuthProblemException {error ='invalid_client',description ='客户端身份验证失败(例如,未知客户端,不包括客户端身份验证或不支持的身份验证方法)。授权服务器可以返回HTTP 401(未授权)状态码,以指示支持哪些HTTP认证方案。如果客户端尝试通过授权请求标头字段进行身份验证,则授权服务器务必使用HTTP 401(未授权)状态码进行响应,并包括与客户端使用的身份验证方案相匹配的WWW-Authenticate响应标头字段。 'null',state ='null',scope ='null',redirectUri ='null',responseStatus = 0,参数= {}} 在org.apache.oltu.oauth2.common.exception.OAuthProblemException.error(OAuthProblemException.java:59) 在org.apache.oltu.oauth2.client.validator.OAuthClientValidator.validateErrorResponse(OAuthClientValidator.java:63) 在org.apache.oltu.oauth2.client.validator.OAuthClientValidator.validate(OAuthClientValidator.java:48) 在org.apache.oltu.oauth2.client.response.OAuthClientResponse.validate(OAuthClientResponse.java:64) 在org.apache.oltu.oauth2.client.response.OAuthClientResponse.init(OAuthClientResponse.java:59) 在org.apache.oltu.oauth2.client.response.OAuthAccessTokenResponse.init(OAuthAccessTokenResponse.java:52) 在org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory.createCustomResponse(OAuthClientResponseFactory.java:60) 在org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:111) 在org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65) 在org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55) 在org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71) 在org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.getOauthResponse(OpenIDConnectAuthenticator.java:580) ...还有61
此错误之后,使用GLUU管理UI,我将“令牌端点的身份验证方法”从client_secret_basic更改为client_secret_post,然后再次尝试测试,一切正常:
最后是我的问题:
在此测试方案中,我可以更改外部IDP的配置,但是在实际方案中,我无法在外部IDP上更改该参数。我在WSO2IS身份提供程序配置中找不到如何从client_secret_basic,client_secret_post,client_secret_jwt,private_key_jwt,无选择中选择。
在不将GLUU IDP设置从client_secret_basic更改为client_secret_post的情况下,我应该在wso2is的配置中进行哪些更改才能使此方案起作用?
答案 0 :(得分:1)
从IS 5.6.0起,您可以选择配置客户端身份验证机制。在IdP设置的“ OAuth2 / OpenID Connect配置”中,可以使用“ 为客户端身份验证启用HTTP基本身份验证”属性来满足您的要求。