После добавления следующего сценария адаптивной аутентификации, если имя пользователя не соответствует формату, я должен получить пользовательское сообщение о состоянии, в котором говорится: Access Denied, invalid username format.
Но вместо этого я получаю сообщение о состоянии по умолчанию, Something went wrong during the authentication process. Please try signing in again.
function onLoginRequest(context) {
executeStep(1, {
onSuccess: function(context) {
var user = context.currentKnownSubject;
if (user!= null && user.username != null && !user.username.equals('')) {
Log.info("username: " + user.username);
} else {
sendError('',{'status':'AUTHENTICATION USERNAME ERROR', 'statusMsg': 'Access denied, invalid username format.'});
}
}
});
}
Кроме того, я также получаю следующую ошибку в файле wso2carbon.log
.
TID: [-1234] [authenticationendpoint] [2022-10-05 15:44:12,715] [37951f7d-8240-48d4-ad4f-1d4c8a6a3ec4] ERROR {org.wso2.carbon.identity.application.authentication.endpoint.util.AuthContextAPIClient} - Sending GET request to URL : https://dev.wso2istemp.com/api/identity/auth/v1.1/data/AuthenticationError/0b0efc37-819d-4b39-85b2-517126c3c9cb, failed. java.io.IOException: Server returned HTTP response code: 401 for URL: https://dev.wso2istemp.com/api/identity/auth/v1.1/data/AuthenticationError/0b0efc37-819d-4b39-85b2-517126c3c9cb
...
org.wso2.carbon.identity.application.authentication.endpoint.util.AuthContextAPIClient.getContextProperties(AuthContextAPIClient.java:70)
at org.apache.jsp.retry_jsp._jspService(retry_jsp.java:194)
...
org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter.doFilter(ContentTypeBasedCachePreventionFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
...
org.wso2.carbon.identity.application.authentication.endpoint.util.filter.AuthenticationEndpointFilter.doFilter(AuthenticationEndpointFilter.java:190)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
...
Конфигурации <IS_HOME>/repository/conf/deployment.toml
для [server]
следующие.
[server]
hostname = "dev.wso2istemp.com"
node_ip = "127.0.0.1"
base_path = "https://$ref{server.hostname}:${carbon.management.port}"
В чем причина следующей проблемы в wso2carbon.log
и почему пользовательское сообщение о статусе не отображается должным образом?
При выполнении сценария адаптивной аутентификации значения передаются на сервер идентификации (IS) в зашифрованном виде. В приведенном выше случае зашифрованный фрагмент данных передается в ИС,
https://dev.wso2istemp.com/api/identity/auth/v1.1/data/AuthenticationError/24e56d99-9494-4989-a3e2-4008b73ebd9b
с последним сегментом URL-адреса является фрагментом данных. Когда сервер пытается получить этот фрагмент данных с помощью запроса GET, выдается java.io.IOException: Server returned HTTP response code: 401 for URL
код для несанкционированного доступа. Поскольку этот блок данных не получен должным образом, отображается сообщение о состоянии по умолчанию вместо пользовательского сообщения о состоянии. Шаги для решения этой проблемы приведены ниже.
dev.wso2istemp.com
, который вы использовали, с localhost
в файле /etc/hosts
.<IS_HOME>/repository/conf/deployment.toml
и проверьте следующую конфигурацию [identity.auth_framework.endpoint]
и проверьте, установлен ли для взаимного SSL значение false через mutual_ssl_manager_enabled=false
mutual_ssl_manager_enabled=false
, поскольку для IS рекомендуется использовать взаимный SSL. Если вы перейдете к <IS_HOME>/repository/resources/conf/default.json file
, вы можете заметить, что значение по умолчанию для mutual_ssl_manager_enabled
равно true
internal_hostname
, чтобы внутренние вызовы API отправлялись правильно. .<IS_HOME>/repository/conf/deployment.toml
, вы можете проверить, правильно ли она применена к <IS_HOME>/repository/conf/identity/identity.xml
, проверив наличие <ServerHostName>localhost</ServerHostName>
[server]
internal_hostname = "localhost"
localhost
должно быть добавлено в SAN для сертификата при создании сертификата (-ext SAN=dns:localhost
)keytool -genkey -alias newcert -keyalg RSA -keysize 2048 -keystore newkeystore.jks -dname "CN=dev.wso2istemp.com, OU=Is,O=Wso2,L=SL,S=WS,C=LK" -storepass mypassword -keypass mypassword -ext SAN=dns:localhost
deployment.toml
и проверить, решает ли она проблему. (В случае с одним узлом internal_hostname
должен быть похож на hostname
)[server]
hostname = "dev.wso2istemp.com"
internal_hostname = "dev.wso2istemp.com"
<IS_HOME>/repository/deployment/server/webapps/authenticationendpoint/WEB-INF/web.xml
и раскомментируйте следующий фрагмент с комментариями.<!--context-param>
<param-name>AuthenticationRESTEndpointURL</param-name>
<param-value>https://localhost:9443/api/identity/auth/v1.1/</param-value>
</context-param-->
internal_hostname
будет отражено в запросе, поскольку внутренние вызовы API блокируются при замене hostname
сервера вместо internal_hostname
для внутренних вызовов API (https://dev.wso2istemp.com/api/identity/auth/v1.1/data/AuthenticationError/24e56d99-9494-4989-a3e2-4008b73ebd9b
).