本地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,如需转载请自行联系原作者

相关文章
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
245 8
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
225 5
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
427 7
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
414 1
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
309 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
272 1
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
480 2
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
733 0