Hom*_*mam 7 .net azure saml-2.0
我正在尝试将Windows Azure Active Directory用作Web应用程序中的IdP.我的代码在其他SAML IdP上运行正常,但仅在Windows Azure AD中提供以下消息!
登入
抱歉,我们在登录时遇到问题.
我们收到了一个糟糕的请求 其他技术信息:
跟踪ID:8377e605-6b9f-47be-8547-5fce7f4285af
时间戳:2014-08-04 13:31:27Z
ACS75005:
该请求不是有效的SAML2协议消息.
我替换了我的代码并使用了Microsoft 在这里发布的SAML请求,只替换了一些值,但仍然得到相同的错误消息!!
我的要求有什么问题?我怎样才能获得有关该消息的更多详细信息!
知道我的应用程序是在Windows Azure AD应用程序中定义的.
<samlp:AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="_56dbfeac-107a-46d2-b989-651f90107312" Version="2.0" IssueInstant="2014-08-04T13:28:05Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">SOMETHING</Issuer>
</samlp:AuthnRequest>
Run Code Online (Sandbox Code Playgroud)
编辑001 在将断言编辑为Dushyant建议后,它变为:
<samlp:AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:assertion"
ID="_efcebb45-5ee6-42df-ace4-a343f28f5a46"
Version="2.0" IssueInstant="2014-08-07T06:29:09Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">SOMETHING</Issuer>
</samlp:AuthnRequest>
Run Code Online (Sandbox Code Playgroud)
但仍然出现同样的错误!
另请找到我在这里使用的测试项目.仅替换webconfig中AppSettings中的值以用于SAML设置.
Dus*_*ill 12
使用
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
Run Code Online (Sandbox Code Playgroud)
而不是xmlns ="urn:oasis:names:tc:SAML:2.0:metadata"
我相信你按照我们在这里记录的内容:http://msdn.microsoft.com/en-us/library/azure/dn195589.aspx.如果是这样,你在那篇文章中发现了一个错误 - 抱歉.
希望这可以帮助.
Homam,我查看了你的代码.问题在于AuthnRequest的编码方式.我将其更改为标准的deflate编码,它工作正常.
public string GetAzureRequest(AuthRequestFormat format)
{
string xml = @"<samlp:AuthnRequest xmlns=""urn:oasis:names:tc:SAML:2.0:assertion"" ID=""#ID""
Version=""2.0"" IssueInstant=""#DATE""
xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol"">
<Issuer xmlns=""urn:oasis:names:tc:SAML:2.0:assertion"">#ISSUER</Issuer>
</samlp:AuthnRequest>";
xml = xml.Replace("#DATE", issue_instant);
xml = xml.Replace("#ID", id);
xml = xml.Replace("#ISSUER", appSettings.Issuer);
xml = xml.Replace("\r\n", "");
if (format == AuthRequestFormat.Base64)
{
/*COMMENTED THIS OUT*/
//byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(requestDocument.OuterXml);
//string result = System.Convert.ToBase64String(toEncodeAsBytes);
//return result;
/*ADDED THIS*/
MemoryStream memoryStream = new MemoryStream();
StreamWriter writer = new StreamWriter(new DeflateStream(memoryStream, CompressionMode.Compress, true), new UTF8Encoding(false));
writer.Write(xml);
writer.Close();
string result = Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length, Base64FormattingOptions.None);
return result;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)