WSO2 Identity Server с внешним IDU OpenId Connect GLUU - метод аутентификации client_secret_basic против client_secret_post
Я тестирую wso2 Identity Server с внешним IDP OpenID Connect. Внешний IDP - это GLUU.
В моем тестовом примере у меня есть три компонента:
- простое веб-приложение, развернутое на localhost:8099
- Сервер идентификации wso2, развернутый на локальном хосте:9443 (с портами по умолчанию)
- сервер GLUU, развернутый на локальном хосте (с портами по умолчанию)
Поток, который я хочу получить, представляет собой код авторизации OpenId Connect, мое "простое веб-приложение" (настроенное как поставщик услуг в wso2is) требует код для wso2is, перенаправляется на страницу входа в GLUU, получает код авторизации и обменивает код авторизации для токена доступа.
"Простое веб-приложение" зарегистрировано как поставщик услуг в wso2is (с именем "Тест поставщика услуг") с конфигурацией входящей аутентификации типа "Конфигурация OAuth/OpenId Connect". В этой конфигурации я установил URL обратного вызова моего "простого веб-приложения", а также секретный ключ клиента и идентификатор клиента, используемые моим простым веб-приложением для получения токена доступа.
Этот "Тест поставщика услуг" в разделе "Конфигурация локальной и исходящей аутентификации" имеет значение Федеративная аутентификация с "My Gluu Test IDP".
Мой IDP Gluu Test - это имя провайдера идентификации, которого я добавил к "провайдерам услуг" wso2is. Я загрузил сертификат Gluu в "My Gluu Test IDP".
В разделе "Федеративные аутентификаторы" "My Gluu Test IDP" я настроил "OAuth/OpenId Connect Configuration" с информацией о GLUU IDP (идентификатор клиента, секрет, токен и аутентификация) и с этим обратным вызовом URL: https://localhost:9443/commonauth
Это была предпосылка.
Я пробую этот сценарий в первый раз, и это было, я получаю:
- Вызов конечной точки авторизации wso2is из моего "простого веб-приложения"
- Перенаправить на страницу входа GLUU
- Вернемся к моему обратному вызову uri "простого веб-приложения" с ошибкой вместо кода авторизации: {error_description= Требуется аутентификация, состояние =OX86oF, ошибка =login_required, session_state=70b94648800ea5fa1e2476570ee9678225eaccc4deecea18ca9db022bYGGIIG1eg_1_1_1_1_1_1_1_1_1_1_1_1_1_g_1g
Журнал wso2is, связанный с этой ошибкой:
TID: [-1234] [] [2018-09-21 10: 33: 10529] ОШИБКА {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.OpenIDConnectAuthenticatorID.utheutheutator.utseutututututututututututAuthenticator.ResAuthenticator.RessAuthenticator.RessAuthenticator.RessAuthenticator.RedAuthenticator.Ru.Authenticator. в org.wso2.carbon.identity.application.authentication.framework.AbstractApplicationAuthenticator.process(AbstractApplicationAuthenticator.java:72) в org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler.docess 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.autity.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:131) в org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle: atRequest.jpg org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53) в org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.CommonAuthenticationServlet:43) в javax.servlet.http.HttpServlet.service(HttpServlet.java:624) в javax.servlet.http.HttpServlet.service(HttpServlet.java:731) в org.eclipse.equinox.httpathl tor.service(ContextPathServletAdaptor.java:37) в org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) в org.eclipse.equinox.http.servlet.internal.Proxyervlet ProxyServlet.java:128) в org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) в javax.servlet.http.HttpServlet.service (HttpServlet.javag: at31).carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) в org.apache.catalina.FilF. (ApplicationFilterChain.java:208) в org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.j).java.j 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: atFilter (8) приложение (приложение).owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:72) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) Application.Filter.Filter.Cat.Filter.Cat.Filter.CatterFilter.Cat.Filter.: 208) в org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:65) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.javag24. at.) catalina.core.ApplicationFilterChain. 241) в орг.апаче. catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) в org.apache.catalina.core. 110) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) в org.wso2.carbon.identity.ident.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:80) в org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:91) в org.wso2.caruth.ve.ve.a..AuthenticationValve.invoke(AuthenticationValve.java:60) в org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) в org.wso2.carbon.tomcat.ext.valves.Vve$ $. вызвать (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.g) или carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) в org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) car. org.tv.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) в org.apache.catalina.connector.CoateAg.jpg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) в org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) в org.apache.tomcat.cessPro $Socket.NET..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.om.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, соответствующее схеме аутентификации, используемой клиентом.', Uri='null', состояние = 'null', область действия ='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.OAuthClientValididalvalididalvalid.validalvalid.validalvalid.valid.validalvalid.validalvalid.validalvalid.valid.validid.valid.validid.valid.valid.valid.valid.valid.validid.valid.valid.alid.valid.alid.valid.alid.valid.alid.alid. в org.apache.oltu.oauth2.client.response.OAuthClientResponse.validate(OAuthClientResponse.java:64) в org.apache.oltu.oauth2.client.response.OAuthClientResponse.init(OAuthClientResponse.jap) или.oltu.oauth2.client.response.OAuthAccessTokenResponse.init(OAuthAccessTokenResponse.java:52) в или g.apache.oltu.oauth2.client.response.OAuthClientResponseFactory.createCustomResponse(OAuthClientResponseFactory.java:60) в org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLCon) или oauth2.client.OAuthClient.accessToken(OAuthClient.java:65) в org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55) в org.apache.oltu.oauth2.client.OacToken OAuthClient.java:71) at org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.getOauthResponse(OpenIDConnectAuthenticator.java:580) ... еще 61
После этой ошибки в пользовательском интерфейсе администрирования GLUU я изменил "метод аутентификации для конечной точки токена" с client_secret_basic на client_secret_post и повторил тест снова, и все работает нормально:
- Вызов конечной точки авторизации wso2is из моего "простого веб-приложения".
- Перенаправить на страницу входа GLUU
- Перенаправить на страницу авторизации WSO2IS (OpenID User Claims Service Provider Тестовое приложение запрашивает доступ к информации вашего профиля...)
- Вернуться к моему обратному вызову uri "простого веб-приложения" с кодом авторизации: {code=7269a75f-8702-3843-a553-465b69546a27, состояние =6yFD89, session_state=61d504abd9fe3cda28934f4aa394b156d6792071669f303Ba4KuBh4x4x64x64x64x4x64x1
- Мое "простое веб-приложение" вызывает конечную точку авторизации wso2is, передает код и получает accecc_token
И наконец мой вопрос:
В этом тестовом сценарии я могу изменить конфигурации внешнего IDP, но в реальном сценарии я не смог изменить этот параметр на внешнем IDP. Я не смог найти в конфигурации провайдера идентификации WSO2IS, как выбрать из client_secret_basic, client_secret_post, client_secret_jwt, private_key_jwt, нет.
Без изменения параметра IDU GLUU с client_secret_basic на client_secret_post, что я должен изменить в конфигурации wso2is, чтобы этот сценарий работал?
1 ответ
Начиная с версии 5.6.0, у вас есть возможность настроить механизм аутентификации клиента. В "Конфигурации OAuth2/OpenID Connect" настроек IdP вы можете использовать свойство "Включить базовую аутентификацию HTTP для аутентификации клиента", чтобы удовлетворить ваши требования.