微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过应用程序管理API进行配置时,无法使WSO2IS 2FA for Management Console工作

如何解决通过应用程序管理API进行配置时,无法使WSO2IS 2FA for Management Console工作

我们正在运行WSO2IS v5.10.0,并且希望对碳管理控制台启用2FA。手动遵循官方指南https://is.docs.wso2.com/en/latest/learn/multi-factor-authentication-for-wso2-is-management-console/,启用2FA并可以正常工作(正在创建名为“ self”的服务提供商)。

然后,我们删除SP('self'),并尝试通过Application Management REST API(https://is.docs.wso2.com/en/latest/develop/application-rest-api/中的POST / applications)重新创建SP,并将有效负载配置为与所使用的选项完全相同来自上一步的官方指南。结果是2FA无法正常工作,并且服务器在访问登录页面https:// localhost:9443 / carbon / admin / login.jsp时记录以下异常:

ERROR {org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet} - Error when processing the authentication request! org.wso2.carbon.identity.base.IdentityException: Error validating the authentication request
        at org.wso2.carbon.identity.base.IdentityException.error(IdentityException.java:60)
        at org.wso2.carbon.identity.sso.saml.validators.SPInitSSOAuthnRequestValidator.validate(SPInitSSOAuthnRequestValidator.java:249)
        at org.wso2.carbon.identity.sso.saml.SAMLSSOService.validateSPInitSSORequest(SAMLSSOService.java:101)
        at org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleSPInitSSO(SAMLSSOProviderServlet.java:716)
        at org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.handleRequest(SAMLSSOProviderServlet.java:272)
        at org.wso2.carbon.identity.sso.saml.servlet.SAMLSSOProviderServlet.doPost(SAMLSSOProviderServlet.java:158)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        ...
Caused by: java.util.MissingFormatArgumentException: Format specifier '%s'
        at java.base/java.util.Formatter.format(Formatter.java:2672)
        at java.base/java.util.Formatter.format(Formatter.java:2609)
        at java.base/java.lang.String.format(String.java:2897)
        at org.wso2.carbon.identity.core.KeyStoreCertificateRetriever.getCertificate(KeyStoreCertificateRetriever.java:60)
        at org.wso2.carbon.identity.core.dao.SAMLSSOServiceProviderDAO.getApplicationCertificate(SAMLSSOServiceProviderDAO.java:612)
        at org.wso2.carbon.identity.core.dao.SAMLSSOServiceProviderDAO.getServiceProvider(SAMLSSOServiceProviderDAO.java:566)
        at org.wso2.carbon.identity.core.persistence.IdentityPersistenceManager.getServiceProvider(IdentityPersistenceManager.java:273)
        at org.wso2.carbon.identity.sso.saml.util.SAMLSSOUtil.getServiceProviderConfig(SAMLSSOUtil.java:2464)
        at org.wso2.carbon.identity.sso.saml.validators.SPInitSSOAuthnRequestValidator.validate(SPInitSSOAuthnRequestValidator.java:120)
        ... 59 more

客户端正在显示错误消息:

SAML 2.0 based Single Sign-On
Error when processing authentication request!
Please try login again!

我们通过API发送的有效载荷是这样的:

{
    "name": "Carbon Management Console","description": "This is the configuration for the Carbon Management Console.","claimConfiguration": {
        "subject": {
            "includeUserDomain": true,"includeTenantDomain": true
        }
    },"inboundProtocolConfiguration": {
        "saml": {
            "manualConfiguration": {
                "issuer": "carbonServer","assertionConsumerUrls": ["https://localhost:9443/acs"],"singlelogoutProfile": {
                    "enabled": true
                },"requestValidation": {
                    "enableSignatureValidation": true
                },"responseSigning": {
                    "enabled": true
                }
            }
        }
    },"authenticationSequence": {
        "type": "USER_DEFINED","steps": [{
            "id": 1,"options": [{
                "idp": "LOCAL","authenticator": "BasicAuthenticator"
            }]
        },{
            "id": 2,"authenticator": "totp"
            }]
        }],"subjectStepId": 1,"attributeStepId": 1
    }
}

从UI导出两个SP的配置(单击“ SP”页面上的“导出”操作)并进行比较之后,我们可以清楚地看到它们在以下部分上有所不同:

Manual SP
<certAlias>localhost</certAlias>
<doSignAssertions>true</doSignAssertions>
API SP
<doSignAssertions>false</doSignAssertions>

我的问题是,如何通过API创建SP时出现 certAlias 并且 doSignAssertions 为真?找不到有效负载架构中记录的那些选项。我们的有效载荷中缺少任何东西吗?

奇怪的是,仅通过从UI编辑和更新API创建的SP的 SAML2 Web SSO配置,而无需进行任何更改(在入站身份验证配置下] >部分,展开 SAML2 Web SSO配置,单击配置,然后单击更新,而不进行任何更改),然后单击 certAlias doSignAssertions 的设置正确(我可以通过重新导出进行验证),并且2FA可以正常工作。

变通

一个GET获取我从UI手动创建的工作SP,并检查返回的有效负载,我设法弄清楚如何提供缺少的certAlias。我必须在"signatureValidationCertAlias": "accessiq-dev"中设置requestValidation。但是,我找不到如何将doSignAssertions设为true的解决方案。最终,我最终使用POST /applications/import端点通过导入以前从UI导出的工作SP的xml来创建SP。这行得通。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。