使用SAML 2.0从.net mvc验证到另一个站点

时间:2018-01-22 19:10:58

标签: asp.net-mvc saml-2.0

我之前从未使用过SAML而且有点困惑。我以为我可以只使用base64编码xml和一个键,然后就可以了,但显然它并不那么简单。

我必须将SAMLRESPONSE发送到post方法

<form method="post" action="%ACS" ...>
    <input type="hidden" name="SAMLResponse" value="%RESPONSE" />
    <input type="hidden" name="RelayState" value="%RELAYSTATE" />
     ...
</form>

操作是他们的URL和我在我身上生成的SAMLRESPONSE,其中包含certificare或IDP META数据和断言。我以为我可以编码我的xml

<samlp:Response xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'ID='identifier_1'Version='2.0'IssueInstant='2004-12-05T09:22:05Z'Destination='https://sp.example.com/SAML2/SSO/POST'> <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer> <samlp:Status> <samlp:StatusCode Value='urn:oasis:names:tc:SAML:2.0:status:Success'/> </samlp:Status> <saml:Assertion xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'ID='identifier_2'Version='2.0'IssueInstant='2004-12-05T09:22:05Z'> <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer> <ds:Signature xmlns:ds='http://www.w3.org/2000/09/xmldsig#'>...</ds:Signature> <saml:Subject> <saml:NameID Format='urn:oasis:names:tc:SAML:2.0:nameidformat:uid'> " + employeeID + " </saml:NameID> <saml:SubjectConfirmation Method='urn:oasis:names:tc:SAML:2.0:cm:bearer'> <saml:SubjectConfirmationData Recipient='https://sp.example.com/SAML2/SSO/POST'NotOnOrAfter='2004-12-05T09:27:05Z'/> </saml:SubjectConfirmation> </saml:Subject> <saml:Conditions NotBefore='2004-12-05T09:17:05Z'NotOnOrAfter='2004-12-05T09:27:05Z'> <saml:AudienceRestriction> <saml:Audience>https://sp.example.com/SAML2</saml:Audience> </saml:AudienceRestriction> </saml:Conditions> <saml:AuthnStatement AuthnInstant='2004-12-05T09:22:00Z'SessionIndex='identifier_2'> <saml:AuthnContext> <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:u nspecified</saml:AuthnContextClassRef> </saml:AuthnContext> </saml:AuthnStatement> </saml:Assertion> </samlp:Response>

提供商推荐我使用ADFS 3.0,但我想避免更改服务器上的任何内容。我可以使用不同的包来帮助这一切吗?

1 个答案:

答案 0 :(得分:3)

不要尝试自己动手。使用客户端SAML堆栈,例如SAML : SAML connectivity / toolkit

此堆栈将SAML与ADFS等IDP对话。您需要使用客户端堆栈的SAML参数配置ADFS。