Как две разные строки утверждения генерируют идентичные маркеры доступа в WSO2 Identity Server? - PullRequest
0 голосов
/ 25 сентября 2019

Я сгенерировал токен доступа, используя Тип предоставления расширения SAML , как указано в приведенной ниже ссылке:

https://docs.wso2.com/display/AM180/Token+API#TokenAPI-ExchangingSAML2bearertokenswithOAuth2(SAMLextensiongranttype)

Шаг 1: Генерация строки подтверждения.

java -jar SAML2AssertionCreator.jar TestSP admin https://localhost:9443/oauth2/token https://localhost:9443/oauth2/token/home/dinusha/nothing/WSO2/API-Manager/saml-oauth/wso2is-5.0.0/rhbepository/resources/security/wso2carbon.jks wso2carbon wso2carbon wso2carbon

Это дает мне строку утверждения.Я установил срок действия 300 (5 минут).

Шаг 2: Извлечение токена доступа Используя строку подтверждения и закодированную в Base64 строку (consumerKey: ConsumerSecret), я могу сгенерировать токен доступа Oauth.

curl -k -d "grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer&assertion=<ASSERTION_PROVIDED_BY_CLIENT>&scope=PRODUCTION" -H "Authorization: Basic <ASSERTION_PROVIDED_BY_CLIENT>, Content-Type: application/x-www-form-urlencoded" https://localhost:9443/oauth2/token

Создаются токен доступа Oauth и токен обновления.Токен доступа имеет срок действия 3600 (60 минут).

Теперь предположим, что время сеанса пользователя истекло в течение 5 минут (время истечения строки подтверждения), и пользователь выполняет операцию входа в систему, новую строку утверждениягенерируется и существующий токен доступа удаляется.Однако эта новая строка утверждения дает мне тот же токен доступа, который был получен в предыдущем сеансе.Поскольку токен доступа уже недействителен, он пытается создать новый токен доступа с помощью токена обновления.На этом этапе я получаю сообщение об ошибке: «Недопустимый токен обновления».(Логи приведены ниже).Я не думаю, что это проблема с аутентичностью токена обновления, так как новая пара токена доступа должна была быть сгенерирована во второй раз, используя новую строку подтверждения.

TID: [-1234] [] [2019-09-24 12: 59: 02,036] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - добавлен OAuthTokenReqMessageContext в threadlocal{org.wso2.carbon.identity.oauth2.util.OAuth2Util} TID: [-1234] [] [2019-09-24 12: 59: 02,036] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - Тип токена не установлен для приложения поставщика услуг с идентификатором клиента:.Следовательно, по умолчанию будет использоваться идентификатор токена Identity OAuth.Пользовательский генератор токенов не установлен.{org.wso2.carbon.identity.oauth2.util.OAuth2Util} TID: [-1234] [] [2019-09-24 12: 59: 02,039] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} - в кэше найден допустимый токен доступа для клиента:.Оставшееся время: 3549358ms {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} TID: [-1234] [] [2019-09-24 12: 59: 02,040] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} - включить обновление маркера доступа для запроса: false {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} TID: [-1234] [] [2019-09-24 12: 59: 02,040] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} - включить обновление маркера доступа для каждого запроса с учетом OAuthTokenReqMessageContext: false {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} TID: [-1234] [] [2019-09-24 12: 59: 02,040] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} - В кэше найден действительный токен доступа для клиента:.Оставшееся время: 3549357ms {org.wso2.carbon.identity.oauth2.token.handlers.grant.AbstractAuthorizationGrantHandler} TID: [-1234] [] [2019-09-24 12: 59: 02,040] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - очищенный OAuthTokenReqMessageContext {org.wso2.carbon.identity.oauth2.util.OAuth2Util} TID: [-1234] [] [2019-09-24 12: 59: 02,040] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - выдан клиенту маркер доступа: идентификатор пользователя: @ carbon.super и области действия: default {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - выполнение клиентских аутентификаторов OAuth.{} Org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnServiceTID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - получение зарегистрированного списка аутентификатора клиента OAuth.{org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - Оценка canAuthenticate для аутентификатора: BasicOAuthClientCredAuthenticator {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} TID: [-1234] []: 09.09.09 - 09.09.09{org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} - Базовые учетные данные авторизации существуют в качестве заголовка авторизации.Следовательно, возвращая истину.{org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - BasicOAuthClientCredAuthenticator authenticator может обрабатывать входящий запрос.{org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - Authenticator BasicOAuthClientCredAuthenticator может аутентифицировать клиентский запрос.Поэтому мы пытаемся оценить аутентификацию {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} - заголовок авторизации существует.Следовательно, проверяется, присутствуют ли параметры тела {org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} - аутентификация клиента: с секретом клиента.{org.wso2.carbon.identity.oauth2.client.authentication.BasicAuthClientAuthenticator} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - учетные данные клиента были доступны в кэше для идентификатора клиента: {org.wso2.carbon.identity.oauth2.util.OAuth2Util} TID: [-1234] [] [2019-09-24 12: 59: 09,006]DEBUG {org.wso2.carbon.identity.oauth2.util.OAuth2Util} - успешно аутентифицирован клиент с идентификатором клиента: {org.wso2.carbon.identity.oauth2.util.OAuth2Util} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - Результат аутентификации клиента OAuth-аутентификатора BasicOAuthClientCredAuthenticator: true {org.wso2.carbon.identity.uth2.client.authentication.OAuthClientAuthnService} TID: [-1234] [] [2019-09-24 12: 59: 09,006] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - оценка canAuthenticate authenticator:PublicClientAuthenticator {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} TID: [-1234] [] [2019-09-24 12: 59: 09,007] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.PublicClientAuthenticator} - приложение с указанным идентификатором клиента не найдено {org.wso2.carbon.identity.oauth2.client.authentication.PublicClientAuthenticator} TID: [-1234] [] [2019-09-24 12:59: 09,007] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.PublicClientAuthenticator} - идентификатор клиента отсутствует в запросе.{org.wso2.carbon.identity.oauth2.client.authentication.PublicClientAuthenticator} TID: [-1234] [] [2019-09-24 12: 59: 09,007] DEBUG {org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnService} - PublicClientAuthenticator не может обработать этот запрос.{} Org.wso2.carbon.identity.oauth2.client.authentication.OAuthClientAuthnServiceTID: [-1234] [] [2019-09-24 12: 59: 09,040] DEBUG {org.wso2.carbon.identity.oauth2.OAuth2Service} - получен запрос токена доступа для идентификатора клиента, идентификатор пользователя пуст, область действия: [] и тип предоставления: refresh_token {org.wso2.carbon.identity.oauth2.OAuth2Service} TID: [-1234] [] [2019-09-24 12: 59: 09,040] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - Успешная проверка приложения Oauth для ключа потребителя: {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} TID: [-1234] [] [2019-09-24 12: 59: 09,040] ОТЛАДКА{org.wso2.carbon.identity.oauth2.dao.TokenManagementDAOImpl} - Проверка токена обновления для клиента: {org.wso2.carbon.identity.oauth2.dao.TokenManagementDAOImpl} TID: [-1234] [] [2019-09-24 12: 59: 09,089] DEBUG {org.wso2.carbon.identity.oauth2.token.handlers.grant.RefreshGrantHandler} - недопустимый токен обновления, предоставленный для клиента с идентификатором клиента: {org.wso2.carbon.identity.oauth2.token.handlers.grant.RefreshGrantHandler} TID: [-1234] [] [2019-09-24 12: 59: 09,089] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - произошла ошибка при проверке гранта {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} org.wso2.carbon.identity.oauth2.IdentityOAuth2Exception: данные маркера постоянного доступа не найдены

    at org.wso2.carbon.identity.oauth2.token.handlers.grant.RefreshGrantHandler.validatePersistedAccessToken(RefreshGrantHandler.java:251)
    at org.wso2.carbon.identity.oauth2.token.handlers.grant.RefreshGrantHandler.validateGrant(RefreshGrantHandler.java:79)
    at org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer.issue(AccessTokenIssuer.java:226)
    at org.wso2.carbon.identity.oauth2.OAuth2Service.issueAccessToken(OAuth2Service.java:225)
    at org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint.issueAccessToken(OAuth2TokenEndpoint.java:300)
    at org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint.issueAccessToken(OAuth2TokenEndpoint.java:90)
    at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:289)
   at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.wso2.carbon.webapp.mgt.filter.AuthorizationHeaderFilter.doFilter(AuthorizationHeaderFilter.java:128)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter.doFilter(ContentTypeBasedCachePreventionFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:124)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.wso2.carbon.identity.context.rewrite.valve.TenantContextRewriteValve.invoke(TenantContextRewriteValve.java:80)
    at org.wso2.carbon.identity.authz.valve.AuthorizationValve.invoke(AuthorizationValve.java:91)
    at org.wso2.carbon.identity.auth.valve.AuthenticationValve.invoke(AuthenticationValve.java:65)
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
    at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
    at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
    at org.wso2.carbon.event.receiver.core.internal.tenantmgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:48)
    at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
    at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1775)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1734)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

TID: [-1234] [] [2019-09-24 12: 59: 09,090] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - недействительноПредоставленный клиентом идентификатор: {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} TID: [-1234] [] [2019-09-24 12: 59: 09,090] DEBUG {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer} - OAuth-Error-Code = invalid_grant идентификатор клиента = grant-type = refresh_token scope = {org.wso2.carbon.identity.oauth2.token.AccessTokenIssuer}

Подводя итог, моя проблема заключается в том, что две строки утверждений (если первая из них остается в силе) дают мне одну и ту же пару доступа и токен обновления.Любая помощь очень ценится.Спасибо за чтение:)

1 Ответ

2 голосов
/ 26 сентября 2019

Это ожидаемое поведение.Поскольку вы аутентифицируетесь с тем же набором (пользователь, идентификатор клиента и область действия), он вернет предыдущий токен, если в базе данных уже есть активный токен доступа для запрошенного набора (пользователь, идентификатор клиента и область действия).

Если вам нужно сгенерировать новый токен доступа для каждого запроса токена, вам нужно будет включить RenewTokenPerRequest [1] из identity.xml.Но эта конфигурация доступна только в последних версиях (WSO2 IS 5.8.0 GA, WSO2 IS 5.7.0 WUM, WSO2 APIM 2.6.0 WUM)

В противном случае вы можете использовать автономные токены доступа [2].Он будет выдавать новые токены для каждого запроса по типу.

Еще один вариант - написать пользовательский OAuthTokenGenerator [3], расширяя класс OauthTokenIssuerImpl и переопределяя метод renewAccessTokenPerRequest(), чтобы всегда возвращать true.

[1] https://docs.wso2.com/display/IS580/Issuing+New+Tokens+Per+Request

[2] https://docs.wso2.com/display/IS540/Self-contained+Access+Tokens

[3] https://docs.wso2.com/display/IS570/Extension+Points+for+OAuth#ExtensionPointsforOAuth-OAuthTokenGenerator

...