用Azure AD 实现Web 应用身份认证的Multi-Factor Authentication(MFA)
最近客户有个需求,希望把面向public的Web应用中的终端用户数据库由Azure AD来实现,同时希望可以用MFA来实现用户身份认证。这个想法非常好,通过使用Azure的managed service AAD,耗时耗力的数据库运维工作由Azure来完成, 安全管控也同样由Azure完成,开发只要在代码中调用相应的AAD SDK并做相应配置就可以实现集成。 可是印象中Azure中国是只支持在portal登录时候的多重身份验证(MFA)。那么问题来了,客户自己开发的应用能不能用到这个服务呢?比方说,一个外卖app的用户登录app时候能不能也在MFA保护之下?三个team的小伙伴一起做research,最后确认Azure中国是支持对和AAD集成的应用提供MFA保障。考虑到客户都是Java技术栈的,这里Java sample code演示用Azure AD(AAD) 实现Web 应用身份认证的Multi-Factor Authentication(MFA)的过程。整个流程分为三部分:
- Web应用和AAD集成
- 配置MFA
- AAD的配置






对了,还需要记下订阅的tenant id。这个大家用powershell或者azure cli登录一下就知道了
- Web应用的配置
- 在\src\main\webapp\WEB-INF\web.xml里修改authority(必须如下图所示),tenant (上文提到的tenant id),client_id(上文提到的应用程序ID),secret_key(上文创建的秘钥值)的值 。
改动前:

改动后:

2. 在\src\main\java\microsoft\aad\adal4jsample\AadController.java里修改方法 getUsernamesFromGraph

3. 在\src\main\java\microsoft\aad\adal4jsample\BasciFilter.java里把“graph.windows.net”修改为“graph.chinacloudapi.cn”
全部完成后打包编译,mvn package ,把war包部署到本机的tomcat,在browser里输入http://localhost:8080/adal4jsample,得到以下页面

点击secure page,页面跳转到中国的Azure AD做身份鉴权,

输入用户名和密码后登陆Web应用的主页如下。

配置MFA
接下来我们要做的事情是在Azure AD里添加web应用的用户,assign用户到web应用并且开启MFA
在注册了Web应用的AAD 目录里添加用户MFAuser

选择“Enable Multi-Factor Authentication" 选项,这里我们还会收到一个临时的password

进入应用程序页面中我们上文注册的Web 应用,把新创建的用户assign给Web应用

打开浏览器,输入http://localhost:8080/adal4jsample/,页面跳转到中国AAD做身份认证,输入新建的用户名和临时密码,页面显示要求配置MFA

AAD MFA可以配置电话,短信,移动device等多种选项,我们选择Authentication Phone和Send me a code by text message

之后,手机会收到一个来自国外的短消息,用里面的code就可以完成最后的verify步骤

重新打开浏览器,输入http://localhost:8080/adal4jsample/,页面跳转到中国AAD做身份认证,这次只需要给出用户名,手机会收到验证码

输入验证码后,身份验证成功,登陆系统正常

Import-Module MSOnline
$username=’xxxxxx’
$password=’yyyyyyyy’
$securepassword=Convertto-SecureString –String $password –AsPlainText –force
$credentials=New-object System.Management.Automation.PSCredential $username,$securepassword
Connect-MsolService –Credential $credentials
$users = Get-msoluser -All | where {$_.UserPrincipalName -like '*zzzzzz'}
$mfausers = $users | select DisplayName,@{N='Email';E={$_.UserPrincipalName}},@{N='StrongAuthenticationRequirements';E={($_.StrongAuthenticationRequirements.State)}} | Sort-Object StrongAuthenticationRequirements
$nostrong = $mfausers | Where-Object StrongAuthenticationRequirements -like '' | Select-Object DisplayName,Email,StrongAuthenticationRequirements
$auth = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$auth.RelyingParty = "*"
$auth.State = "Enabled"
$auth.RememberDevicesNotIssuedBefore = (Get-Date)
$nostrong | Foreach {Set-MsolUser -UserPrincipalName $_.Email -StrongAuthenticationRequirements $auth}
最后提醒一下,电话和短信平台都在海外,所以都是通话和短消息英语
用Azure AD 实现Web 应用身份认证的Multi-Factor Authentication(MFA)的更多相关文章
- .NET Web的身份认证
百度一下”asp.net身份认证“,你会得到很多相关的资料,这些资料通常上来就会介绍诸如”Form认证“”Windows认证“等内容,而没有给出一个完整的流程.初学者对此往往一头雾水,我也曾经被坑过很 ...
- ASP.NET Web API教程(六) 安全与身份认证
在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...
- [Windows Azure] Adding Sign-On to Your Web Application Using Windows Azure AD
Adding Sign-On to Your Web Application Using Windows Azure AD 14 out of 19 rated this helpful - Rate ...
- Asp.net MVC使用FormsAuthentication,MVC和WEB API可以共享身份认证 (转载)
在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...
- Azure AD(五)使用多租户应用程序模式让任何 Azure Active Directory 用户登录
一,引言 距离上次分享关于 “Azure AD" 的知识过去差不多2个多月了, 今天最近刚好也是学习,分享一下关于Azure AD 使用多租户应用程序模式让任何 Azure Active D ...
- 如何在ASP.NET Core中实现一个基础的身份认证
注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ...
- [转]如何在ASP.NET Core中实现一个基础的身份认证
本文转自:http://www.cnblogs.com/onecodeonescript/p/6015512.html 注:本文提到的代码示例下载地址> How to achieve a bas ...
- Core身份认证
Core中实现一个基础的身份认证 注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET ...
- [信息安全] 4.一次性密码 && 身份认证三要素
[信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 在信息安全领域,一般把Cryptography称为密码,而把Passw ...
随机推荐
- Fielddata is disabled on text fields by default. Set fielddata=true on [gender] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memor
ES进行如下聚合操作时,会报如题所示错误: ➜ Downloads curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "size ...
- HTML页面加载异常,按F12调试后居然又好了的解决办法!
原因: 你的代码中获取数据那一段应该是有console控制台调用的代码,一般应该是console.log之类的,就是因为这句话在没开F12的时候,console是个undefined的东西就卡在那啦. ...
- 简单背包问题(0032)-swust oj
简单背包问题(0032) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 5657 Accepted: 1714 Accepted 搜 ...
- 深入理解ES6之——JS类的相关知识
基本的类声明 类声明以class关键字开始,其后是类的名称:剩余部分的语法看起来像对象字面量中的方法简写,并且在方法之间不需要使用逗号. class Person { //等价于prototype的构 ...
- 【转】【JAVA应用】多线程断点下载
[转自] 光仔December http://blog.csdn.net/acmman 问题:多线程下载的好处? 多线程下载比单线程下载快,主要的原因是采用多线程下载,可以抢占更多的服务器资源.抢占C ...
- em单位使用小结
em是一个css的单位. em是一个相对的单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸.(引自CSS2.0手册) 一般在DOM元素中,当前 ...
- 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图
1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...
- idea—— 模版配置
修改File Header: /** * @author: ${USER} Date: ${DATE} Time: ${TIME} */ 新增Package Header: /* * Copyrigh ...
- CountDownLatch的实现原理
CountDownLatch是java并发包中辅助并发的工具类,目的是让并发运行的代码在某一个执行点阻塞,直到所有条件都满足,这里的条件就是调用countDown()方法,有点类似计数器的功能. 用法 ...
- python自带库及第三方库api察看
今天发现一个很有意思的功能,python自带了所有库的文档查看器,配置如下: 配置pydoc服务,cmd中输入如下代码: python –m pydoc –p 1234 回车后 ,使用过程中,该窗口不 ...