1. 新建应用程序
登录Azure门户,进入左侧菜单“企业应用程序--所有应用程序”,点“新建应用程序”, 继续点“创建你自己的应用程序”,如下图选择和录入名称:
填好应用的名称、想要如何处理应用程序 必须选择第三个“继承未在库中找到的任何其他应用程序(非库)”,之后点“创建”按钮;
2. 单一登录设置
继续1中步骤,进入左侧菜单“单一登录”,选择单一登录方法为“SAML”,如下图:
继续,编辑“基本SAML配置”,如下图:
其中:
** 标识符(实体ID)**,从进入左侧菜单“应用注册”,双击进入该应用,进入左侧菜单“公开API”里复制,如下图:
回执URL,就是你自己web程序中用来处理响应数据的页面;
3、将用户增加到该应用中,此处不赘述;
4、idp--->sp模式测试:
4.1 操作方式如下图:
4.2 回执URL程序的处理:
如下处理仅仅解析xml,不对数据进行验签等安全方面的处理;
点击查看代码
` protected void Page_Load(object sender, EventArgs e)
{
try
{
string key = "SAMLResponse";
string enCodeVal = Request.Form.GetValues(key)[0];
string samlResponseXml = Encoding.UTF8.GetString(Convert.FromBase64String(enCodeVal));
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(samlResponseXml);
XmlNodeList nodeList = xmlDoc.ChildNodes;//Issuer节点
XmlNode nodeIssuer = nodeList[0];
XmlNodeList nodeListIssuer = nodeIssuer.ChildNodes;
string loginNo = "";
//node.SelectSingleNode("/Assertion/Subject/NameID").InnerXml;
foreach (XmlNode node in nodeListIssuer)
{
if (node.Name == "Assertion")
{
XmlNodeList nodeListSubject = node.ChildNodes;
foreach (XmlNode nodeSub in nodeListSubject)
{
if (nodeSub.Name == "Subject")
{
loginNo = nodeSub.InnerText;
break;
}
}
break;
}
}
Response.Write("SP端收到的用户名为:" + loginNo);
}
catch (Exception ex)
{
Response.Write("异常:" + ex.Message);
}
}`
5、sp--->idp 模式测试:
由我网站端发起:
5.1. 请求的字符:
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="{0}"
Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" >
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">{1}</Issuer>
</samlp:AuthnRequest>
其中:
ID,Azure AD 使用此属性来填充返回的响应的 InResponseTo 属性。 ID 的开头不能是数字,因此常见的策略是在 GUID 的字符串表示形式前面加上类似于“ID”的字符串。 例如,id6c1c178c166d486687be4aaf5e482730 是有效的 ID。
Issuer,必须与 Azure AD 中云服务的一个 ServicePrincipalNames 完全匹配。 通常,此参数设置为应用程序注册期间指定的应用 ID URI。参照2中实体ID;
重定向URL,从进入左侧菜单“应用注册”后,最上面的“终结点”中获取;
5.2. 重定向后:
重定向后,浏览器跳转到微软网站,按照提示输入用户名和密码,登陆后,会重定向到4中的回调Response.aspx页面中,此页面能解析到用户名NameID;