Azure Active Directory (Azure AD) 是 Microsoft 提供的多租户、基于云的目录和标识管理服务。Azure AD 将核心目录服务、应用程序访问管理和标识保护组合到一个解决方案中,提供基于标准的平台,帮助开发人员根据集中策略和规则为其应用程序提供访问控制。

SAML 即安全断言标记语言,英文全称是 Security Assertion Markup Language。它是一个基于 XML 的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在 SAML 标准定义了身份提供者IDP (identity provider) 和服务提供者SP (service provider),这两者构成了前面所说的不同的安全域。 SAML 是 OASIS 组织安全服务技术委员会(Security Services Technical Committee) 的产品,目前采用的是SAML2.0协议。

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他联邦系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。

以下大体说个原理,还有很多需要在Azure上操作的东西,看手册就好,大体流程是:

https://portal.azure.com

Azure Active Directory -> 企业应用程序 -> 新建应用程式 -> 非库应用程序 -> 添加 -> 配置单一登陆 -> SAML

需要的参数都在下面讲的。

首先要明确SAML中SP和IDP的关系,我们开发的系统就是SP,认证服务器是就是IDP,用户通过Browser对SP进行访问。

在基于SMAL协议的AzureAD认证这套体系中,AzureAD承担了IDP的角色,整个验证过程如下:

配置示例如下:

<?php// 这个指的是sp网站的域名,$spBaseUrl = 'http://samltest.pw'; //or http://<your_domain>$settingsInfo = array (// service provider 配置'sp' => array (// 标识ID, 这个ID目的是给IDP验证是否允许使用的'entityId' => $spBaseUrl.'/demo1/index.php',// 断言接受, 断言就是⑤中的认证确认'assertionConsumerService' => array (// 这个也要配置到IDC上做 回调地址'url' => $spBaseUrl.'/demo1/index.php?acs',),// 登出, 注销登录地址'singleLogoutService' => array ('url' => $spBaseUrl.'/demo1/index.php?sls',),// NAME标识符 后边会讲'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',),// idp 配置'idp' => array (// 因为使用的 windows 的服务, 需要标识具体哪个idp提供服务, 设置平台上会有'entityId' => 'https://sts.windows.net/6c4fda90-****-4241-8027-a79200b2a62c/',// 认证接口 设置平台提供'singleSignOnService' => array ('url' => 'https://login.microsoftonline.com/6c4fda90-****-4241-8027-a79200b2a62c/saml2',),// 退出接口 设置平台提供'singleLogoutService' => array ('url' => 'https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0',),// ssl证书'x509cert' => '',),);

后边会给出示例代码包

SP和IDP之间沟通的格式是需要 NameIDFormat 标示的。

应通过NAME标识符识别该主题,该标识符应采用某种格式,以便对方可以根据格式识别它。

1.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified [default]

2.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

3.urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

4.urn:oasis:names:tc:SAML:2.0:nameid-format:transient
是名称标识符的格式

附代码 https://gitee.com/ytliuxiaoyu/azureAD_saml.git

PHP使用基于SMAL协议的AzureAD认证实现SSO相关推荐

  1. android 用户管理专题之基于oauth2协议的服务认证,基于Oauth2协议的客户端服务器的实现(简单实现)...

    基于Oauth2协议的服务器的实现 库的使用:django-oauth-toolkit 语言: python 框架: django ubuntu18.4 之前非常简单的写了客户端,然后今天把客户端和服 ...

  2. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

    基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid) ...

  3. c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现

    相信各位对OpenSSL库已经不陌生了,目前笔者使用这个库实现了RSA.AES加解密和tcp的双向认证功能,下面来看tcp的双向认证. 1.什么是双向认证 简单说双向认证就是:客户端认证服务端是否合法 ...

  4. 服务器ipv4协议认证,基于TCP/IP应用层密码认证协议的研究

    Internet在全世界盛行,它的基础协议就是传输控制协议/网际协议(TCP/IP).TCP/IP是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来以及传送方式 ...

  5. apache添加ssl协议实现用户认证

    apache添加ssl协议实现用户认证 目标 1对服务器的访问由http改为https, 2仅有证书的客户端可以访问服务器, 3.通过服务器端的配置,可以停用某个客户端的证书. 一 Apache服务器 ...

  6. ASP.NET WebApi 基于JWT实现Token签名认证

    一.前言 开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制 ...

  7. 开始协议处理句柄_基于smb协议的wmiexec浅析

    前言 之前研究过Crackmapexec这款工具,对这个工具基于smb协议的wmiexec执行方法产生的流量进行了分析,网上似乎还没有相关的文章,这里旨在抛砖引玉,简单梳理下整个过程,以初学者的视角, ...

  8. DLedger —基于 raft 协议的 commitlog 存储库

    尊敬的阿里云用户: 您好!为方便您试用开源 RocketMQ 客户端访问阿里云MQ,我们申请了专门的优惠券,优惠券可以直接抵扣金额.请填写下您公司账号信息,点击上图,了解更多哦. 一.DLedger引 ...

  9. 配置snmp_多种设备基于 SNMP 协议的敏感信息泄露漏洞数据分析报告

    作者:知道创宇404实验室 1. 更新情况 2. 事件概述 SNMP协议[1],即简单网络管理协议(SNMP,Simple Network Management Protocol),默认端口为 161 ...

最新文章

  1. 数据库连接字在Web.config里的用法
  2. 如果我的接口必须返回Task,那么实现无操作的最佳方法是什么?
  3. optXXX方法,optBoolean
  4. python list()函数 (从可迭代对象返回初始化的新列表)
  5. L - Two Ants Gym - 102823L
  6. access control java_Java Access Controller
  7. 2019年9月全国程序员工资统计,看看你拖后腿了吗?
  8. 损失函数与代价函数区别
  9. FishC笔记—26 讲 字典:当索引不好用时2
  10. 计算机手机共享上网,上网教程_电脑wifi怎么实现手机共享上网 - 驱动管家
  11. java集成 腾讯信鸽_移动推送 腾讯信鸽集成
  12. IBM Spectrum LSF Suites
  13. 网页设计作业 酒店公寓网站设计——高级酒店公寓网页(4页) HTML+CSS+JavaScript 旅游主题度假酒店
  14. 人为什么要睡觉(胡说八道)
  15. 什么是似然函数?是条件概率吗?
  16. Echarts实现省级地图的两种方法(以浙江省为例)
  17. 猿创征文|HCIE-Security Day60:邮件过滤技术
  18. Python实现线性插值和三次样条插值
  19. [2018 CS:GO Client]2018 Old CSGO 客户端,回忆逝去的青春!
  20. 智能网卡OVS卸载设计

热门文章

  1. 绘制彩虹 -《跟小海龟学Python》案例代码
  2. php防止刷流量攻击
  3. 02_如何提升自己的自信和勇气
  4. android 9.0 10.0 Launcher3添加负一屏(左一屏)功能
  5. 学生党开学收藏榜单,通话质量好的蓝牙耳机
  6. knockoutJS学习笔记02:jsRender模板引擎
  7. 电脑是否被监控?几个步骤教你判断
  8. openssl passwd 手动生成密码——passwd提权
  9. zos JESMSGLG 不显示 job steps return codes
  10. 会员管理小程序实战开发11-获取会员手机号