在没有浏览器的情况下对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有浏览器的情况下对WSO2 Identity Server进行身份验证,并获取SAML2断言消息相关的知识,希望对你有一定的参考价值。

我正在尝试通过SAML2设置使用WSO2 IS进行身份验证的服务提供商。现在,我们有一个用例,其中用户是需要访问服务提供者的机器(即外部程序)。由于用户是一台机器,因此没有浏览器,也无法使用WSO2登录表单完成身份验证步骤,但由于它仍然是用户,因此已获得用户名和密码。

我的问题是这个非GUI用户如何参与SAML2工作流程(特别是将证书传递给WSO2以获取SAMLV2断言消息)并访问服务提供商?

我尝试将以下内容作为模拟,但我失败了

1) curl -v -k http://localhost:8000/service_provider/login
2) Extracting the SAML message from the response:
    curl --user username:password -v  -k https://localhost:9443/samlsso?SAMLRequest=<ENCODED_REQUEST>

基本上,我希望通过SAML断言消息将WSO2的重定向响应返回给服务提供者,但我得到以下内容:https://localhost:9443/authenticationendpoint/login.do;jsessionid=7QON18982323HWIH?commonAuthCallerPath=%2Fsamlsso&forceAuth=false&passiveAuth=false&tenantDomain=carbon.super&sessionDataKey=122JhQ-JQOJ-H8123&relyingParty=test-saml2&type=samlsso&sp=test&isSaaSApp=false&authenticators=BasicAuthenticator:LOCAL,这是人类用户使用浏览器进行身份验证时使用的相同URL。

我也尝试使用HTTP-POST绑定和“sectoken”形式参数,如本文所述:http://xacmlinfo.org/2015/02/12/sso-without-identity-provider-login-page/。但它也没有用。

我还尝试向WSO2的AuthenticationAdminHttpsSoap12Endpoint服务发出SOAP请求,特别是“登录”方法。我使用了从SOAP响应获得的JSESSIONID到上面的步骤,但效果是一样的。这对我来说并不意外,因为WSO2不使用JSESSIONID来检查您是否已经过身份验证(至少不是为了尝试获取SAML响应)。

答案
1.Get login form

Request
curl -v  http://localhost:8000/service_provider/login

Response
Extract SAMLRequest and SSOAuthSessionID (if RelayState presents extract it too)

2.Send saml request to IDP using extracted valuses in step1(In browser this will happen through redirection)

Request
Endpoint : https://<is_host>:9443/samlsso
Verb :post
Content-Type:application/x-www-form-urlencoded
Parameters:[
SAMLRequest:<value from previous step>,
SSOAuthSessionID:<value from previous step>,
RelayState :<value from previous step>]

Response
This will give IS login page.Extract sessionDataKey from that.

3. Login by providing user name password

Reqeust
Endpoint:https://<is_host>:9443/commonauth
Content-Type:application/x-www-form-urlencoded
Verb :post
Parameters: [tocommonauth:true,username:xxxx,password:xxx,sessionDataKey:<extracted from previous step>]

Response
Extract SAML response

5.Post the saml resposne to ACS url of service provider

以上是关于在没有浏览器的情况下对WSO2 Identity Server进行身份验证,并获取SAML2断言消息的主要内容,如果未能解决你的问题,请参考以下文章

在为外部访问实现 API 的情况下对 ASP.NET Core Identity 和 IdentityServer 4 感到困惑

比较WSO2 Identity Server和SCIM

WSO2 Identity Server 和 WSO2 API Manager 集成 - java.rmi.server.ExportException:端口已在使用:9999;

WSO2 Identity Server 和 WSO2 API Manager 集成 - 错误:传输错误 202:绑定失败:地址已在使用中

使用 WSO2 Identity Server 和 WSO2 API Manager 保护后端

Identity Server不验证SAML LogoutRequest签名