首页 > 编程语言 >asp.net程序通过Microsoft Azure中SAML协议实现单点登录

asp.net程序通过Microsoft Azure中SAML协议实现单点登录

时间:2023-04-20 16:45:14浏览次数:39  
标签:asp string 登录 SAML 应用程序 菜单 Azure ID

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;

标签:asp,string,登录,SAML,应用程序,菜单,Azure,ID
From: https://www.cnblogs.com/blackstar2003/p/17337279.html

相关文章

  • Azure DevOps(一)基于 Net6.0 的 WPF 程序如何进行持续集成、持续编译
    一,引言我们是否正在为如何快速的编译、部署客户端应用程序而烦恼?这也是博主最近遇到的问题。目前博主所在公司主要做项目级的定制化开发,多以C/S架构的WPF程序为主,每次到了协助开发团队给实施团队编译好的要测试程序包时,就会出现多人协助,编译、打包好的二进制程序包pull......
  • Raspberry Pi & Experience AI All In One
    RaspberryPi&ExperienceAIAllInOneExperienceAIisaneweducationalprogrammethatofferscutting-edgeKS3(ages11–14)resourcesonartificialintelligenceandmachinelearningforteachersandtheirstudents.Developedincollaborationby......
  • AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)
    引子最近不知怎么的,自从学了WebAPI(为什么是这个,而不是MVC,还不是因为MVC的Razor语法比较难学,生态不如现有的Vue等框架,webapi很好的结合了前端生态)以后,使用别人的组件一帆风顺,但是不知其意,突然很想自己实现一个基于的JWT认证服务,来好好了解一下这个内容。起步自从Session-Cooki......
  • ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
    原文:https://www.cnblogs.com/selimsong/p/7677108.html上一章节中对路由的注册和匹配过程进行了介绍,知道了MVC的Http请求最终是交由MvcHandler处理的,而其处理过程就是对Controller的创建、执行和释放。本章将从以下几点进一步对上面提到的三个过程进行介绍:●MvcHand......
  • ASP.NET Core - 缓存之分布式缓存
    分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护。分布式缓存可以提高ASP.NETCore应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时。与其他将缓存数据存储在单个应用服务器上的缓存方案相比,分布式缓存具有多个优势。当分发......
  • 【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操
    问题描述在AzureAppService的门户上LogStream日志无输出,需要如何操作让其输出ApplicationLogs呢?如下图所示:问题解答请注意,上图中提示说:Applicationlogsareswitchedoff. YoucanturnthemonusingtheAppServiceLogsSettings.应用日志关闭,可以通过AppServiceL......
  • 2023 ASP.NET Core 开发者路线图
    链接ASP.NETCoreDeveloperRoadmap......
  • 面向接口编程实践之aspnetcoreapi的抽象
    最为一名越过菜鸟之后的开发,需要做接口开发。下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象。下面是代码接口,AbsEFWork是webapi,BaseEntityFramework是一个接口库。先介绍一下webapi的实现,代码是从底层往上层写的,阅读代码的习惯应该是自上向下。publiccla......
  • 类库项目无法引用Microsoft.AspNetCore程序集下的类库
    在类库项目中不能直接引用WebApplicationBuilder、ApplicationBuilder等类,这些类位于Microsoft.ASPNetCore程序集中,但是无法通过Nuget包引用,因为该Nuget包的版本已经不再支持,很久没有更新过了。解决方法:在项目文件csproj文件中,在ItemGroup下手动添加引用<FrameworkReferenceInc......
  • asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData
    在mvc的controller中,我们知道有很多的临时变量存放数据,比如说viewData,viewBag,还有一个比较特殊的tempData,关于前两个或许大家都明白,基本上是一个东西,就是各自的编程写法不一样,最终都会放到viewContext中,然后送到WebPage中,如果你要证明的话,可以看下下面的......