开发者社区> 技术小阿哥> 正文

本地ASP.NET开发页面使用AzureAD(AAD)验证登录

简介:
+关注继续查看

Azure和Office365已不是一个热门话题了,因为所谓的云时代已经走进了技术大师们的内心,大家多少有一定了解了,所以就不多介绍了,我的Blog中之前也写了很多关于Azure及Office365的相关文章,如果有兴趣的同学可以参考一下。一般企业内部如果使用了Azure或者Office365产品的话,都会跟本地的域进行验证绑定,然后可以使用相关工具(Dirsync & Azure AD Connect)将本地的域用户同步到AAD里面,然后配置ADFS使用本地的域用户格式进行登录及管理Azure相关服务等,当然也有其他的一些做法,具体就不介绍了,我们首先要知道,Azure 和Office365使用的是同一个AD服务,所以注册的时候自定义的域名称也就是唯一标识了,比如,当注册一个oa@ixmsoft.onmicrosoft.com(portal.office.com)的office365顶订阅的账户的时候,系统也会保留一个oa@imxmsoft.onmicrosoft.com;(manage.windowsazure.com)的订阅账户如果是国内供应商提高的需要将结尾更改为:partner.onm51CTO提醒您,请勿滥发广告!即可。在任何一个账户上新建账户都会显示。如果一开始注册了Office365,就可以通过https://manager.onmicrosoft.com进行提示注册或者管理对应的Azure订阅了,如果是注册了Azure,就可以通过访问https://portal.office.com 进行提示注册或管理对应的Office365订阅了。今天呢,我们主要介绍的是如果通过AAD验证本地开发的自定义web服务(ASP.NET)

首先是介绍一下大概的原理,原理就是我们需要在AAD中注册一个程序,然后通过配置程序值返回对应的URL信息,然后完成对应的验证,整个过程跟本地配置ADFS及ADFS验证登录过程非常类似,废话不多说了,具体见下:

我们当然是首先需要一个Azure账户,具体就不掩饰了,然后验证本地域;

我们首先加本地域添加到Azure中,我们只需要验证就可以,在dns中添加一条txt记录,不使用skype、exchange等服务即可;添加后,我们可以使用Azure AD Connect 工具将本地的用户同步到Azure AD中,当然,也可以直接在本地以添加的域新建用户。我们因为不用sso,所以不勾选sso

image

开始验证DNS

image

然后我们在公网DNS上添加验证记录

image

验证成功

image

然后我 可以看见在office365上也会出现域信息

image

接下来我们添加用户;然后后缀名以本地域进行添加

image

添加完成

image

接下来就是添加应用程序了

image

选择添加开的应用程序

clip_image001

我们定义任意名称

clip_image002

定义返回的url

clip_image003

添加完成后,我们也可以通过配置选项进行修改

clip_image004

我们首先选择客户端ID,复制数据

clip_image005

复制后,我们在代码中修改;我们首先是通过Visual Studio打开相关的代码项目;配置好对应的路劲

image

image

打开web.config配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?xml version="1.0" encoding="utf-8"?>   
<!--    
  For more information on how to configure your ASP.NET application, please visit    
   
http://go.microsoft.com/fwlink/?LinkId=301880
     
  -->    
<configuration>    
  <appSettings>    
    <add key="webpages:Version" value="3.0.0.0" />    
    <add key="webpages:Enabled" value="false" />    
    <add key="ClientValidationEnabled" value="true" />    
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />  
    <add key="ida:ClientId" value="cbc2336e-e7aa-445e-a751-8219830b873a" />     <!--在AAD中注册应用程序完成时获取到的ID-->    
    <add key="ida:Tenant" value="beyondsoft100.partner.onm51CTO提醒您,请勿滥发广告!" />       <!--contoso.onmicrosoft.com]--> <!--当前租户名称:当前目录中粗行间用户是所用的后缀名-->    
    <add key="ida:AADInstance" value="
https://login.chinacloudapi.cn/{0}"
 />    <!--在AAD的端点好看也可以获取到-->    
    <add key="ida:PostLogoutRedirectUri" value="
https://localhost:44320?username=test/"
 />     <!--在AAD中注册程序时所填写的返回URL地址-->    
     
  </appSettings>    
  <system.web>    
    <compilation debug="true" targetFramework="4.5" />    
    <httpRuntime targetFramework="4.5" />    
  </system.web>    
  <runtime>    
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">    
      <dependentAssembly>    
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />    
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />    
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />    
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />    
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />    
        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-4.0.2.28" newVersion="4.0.2.28" />    
      </dependentAssembly>    
      <dependentAssembly>    
        <assemblyIdentity name="Microsoft.IdentityModel.Protocol.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral" />    
        <bindingRedirect oldVersion="0.0.0.0-1.0.2.28" newVersion="1.0.2.28" />    
      </dependentAssembly>    
    </assemblyBinding>    
  </runtime>    
</configuration>

image

通过对应的数据进行修改即可

image

image

所以修改为 fanwei.onmicrosoft.com

clip_image001[4]

然后修改登录域名,国际版本为

国际版本为windows.net

image

最后,修改需要返回的url

clip_image001[6]

,保存后,我们进行测试

image

我们可以查看已经开始执行debug模式

clip_image001[8]

同时我们也可以查看到登录页面了,

clip_image002[4]

我们单击登录

我们发现直接跳转到了我们的新建的WEBSERVER的应用程序界面了,

其实该界面也类似于我们的ADFS界面

clip_image003[4]

我们使用user01@ixmsoft.com用户进行登录

clip_image004[4]

其实已经登录成功了,提示第一次登录需要修改密码

clip_image005[4]

我们按照提示修改一次密码,及正确登录

clip_image006

------------------------------------------------------------------------------------------------------------------

我们为了更好的显示,我们修改本地的显示页面

定义显示内容即可

clip_image007

clip_image008

登录成功了。页面的右上角正常显示当前登录的用户名

clip_image009




本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1829833,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何在Linux (CentOS7.3) 下安装JDK1.8?【一篇文章教会你】
如何在Linux (CentOS7.3) 下安装JDK1.8?【一篇文章教会你】
3 0
OSPF详解(一)
一、OSPF的五种包Hellow:发现邻居建立邻接关系DBD:检查路由器的数据库之间是否同步LSR:向另外一台设备请求特定的链路状态LSU:发送链路状态信息LSACK:确认多段的发送信息二、OSPF的三张表1、 邻居列表:列出每台路由器全部已经建立邻接关系的邻居路由器2、 链路状态数据库:列出网络中其他路由器的信息,由此显示了全网的网络拓扑3、 路由表:列出通过SPF算法计算出到达每个相连网络的最佳路径三、OSPF的特点1、 区域概念,有效减少路由条目对CPU和内存占用,将拓扑变动局限在本区域内,详细的LSA泛洪控制2、 邻接关系。OSPF协议定义了一些路由器类型和网络全相同时,就以自身为根,
4 0
OSPF详解(二)
十六、OSPF区域1、 区域0:汇总每个区域的网络拓扑到其他区域。所有的域间通信量必须通过骨干区域,非骨干区域不能直接交换数据包。2、 路由器类型:IR、BR、ABR、ASBR3、 IR:所有接口都属于同一区域的路由器。4、 BR:至少有一个接口是与骨干area0相连的路由器。Area0不一定是骨干区域,但骨干区域–定是area0,要成为骨干必须有一个邻接关系在里面5、 ABR:连接其他区域到骨干区域,至少一个接口属于骨干区域。6、 ASBR: OSPF域外部的通信量进入0SPF域的网络路由器。7、 0SPF的虚链路:一条通过非骨干区域连接到骨干区域的链路。通过非骨干区域修复分段efreshT
5 0
OSPF 的 LSA 类型汇总(包括 OSPFv2 和 OSPFv3)
OSPF LSALSA(Link-State Advertisement,链路状态广播)是链接状态协议使用的一个分组,它包括有关邻居和通道成本的信息。 LSAs 被路由器接收用于维护它们的 RIB(路由表)。OSPF 路由协议是链路状态型路由协议,这里的链路即设备上的接口。链路状态型路由协议基于连接源和目标设备的链路状态作出路由的决定。链路状态是接口及其与邻接网络设备的的关系的描述,接口的信息即链路的信息,也就是链路的状态(信息)。这些信息包括接口的 IPv6 前缀(prefix)、网络掩码、接口连接的网络(链路)类型、与该接口在同一网络(链路)上的路由器等信息。这些链路状态信息由不同类状态数
4 0
OSPF LSA类型详解
OSPF为什么要划分LSA类型?这是由于OSPF区域化结构决定的,在没有区域化结构的路由协议中路由数据库里是没有类型之分的,如EIGRP。由于OSPF的区域特征所以就会有相应的LSA类型来决定OSPF数据库里的LSA类型。最后经过SPF算法把相应的LSA类型的路由提到路由表中形成不同类型的OSPF路由:• O - OSPF• IA - OSPF inter area• N1 - OSPF NSSA external type 1• N2 - OSPF NSSA external type 2• E1 - OSPF external type 1• E2 - OSPF externalOSPF路
4 0
前端性能优化之白屏时间
该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。
13 0
深入 HTTP/3(2)|不那么 Boring 的 SSL
对于 QUIC 的浅述中我们了解到,QUIC 的优化很大程度上是一种基于 TLS 流程的优化,由此也可见 TLS 对于 QUIC 的重要性,那么今天我们就来聊一聊 QUIC-TLS。为了表述尽量没有歧义,我们先来规范下文章中各个术语的意义。
6 0
100 个网络基础知识普及,看完成半个网络高手
1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。2)OSI 参考模型的层次是什么?有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。3)什么是骨干网?骨干网络是集中的基础设施,旨在将不同的路由和数据分发到各种网络。它还处理带宽管理和各种通道。4)什么是 LAN?LAN 是局域网的缩写。它是指计算机与位于小物理位置的其他网络设备之间的连接。5)什么是节点?节点是指连接发生的点。它可以是作为网络一部分的计算机或设备。为了形成网络连接,需要两个或更多个节点。6)什么是路由器?路由器可以连接两个或更多网段。这些是
4 0
WebSocket - 理论篇
WebSocket - 理论篇
5 0
HTTP - 长连接 & 短连接 & 长轮询 & 短轮询 & 心跳机制
HTTP - 长连接 & 短连接 & 长轮询 & 短轮询 & 心跳机制
6 0
13692
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载