ADFS是如何工作的

ADFS(Active Directory Federation Services)实现身份验证及单点登录(SSO,Single Sign-On)的过程涉及多个步骤,这些步骤确保用户只需一次登录就可以访问多个受信任的应用程序和服务。以下是ADFS实现单点登录的详细过程:

  1. 建立信任关系
    • ADFS首先与需要实现单点登录的应用程序或服务建立信任关系。这通常通过配置这些应用程序或服务的元数据来完成,这些元数据描述了它们如何与ADFS进行交互。
  2. 用户访问应用程序
    • 当用户尝试访问一个受ADFS保护的应用程序时,该应用程序会检测用户是否已经通过ADFS进行了身份验证。如果用户尚未登录,应用程序会将用户重定向到ADFS的登录页面。
  3. 身份验证
    • 在ADFS登录页面上,用户需要提供其Active Directory(AD)的凭据(通常是用户名和密码)。
    • ADFS验证这些凭据是否有效,并检查用户是否有权访问请求的应用程序。
  4. 发放安全令牌
    • 如果身份验证成功,ADFS会生成一个安全令牌。这个令牌通常是一个SAML(Security Assertion Markup Language)或WS-Federation令牌,包含了用户的身份信息和授权信息。
    • 令牌会被加密和签名,以确保其完整性和机密性。
  5. 令牌传递和验证
    • ADFS将令牌发送给最初用户尝试访问的应用程序。
    • 应用程序接收到令牌后,会验证令牌的有效性,并提取用户的身份信息和授权信息。
  6. 访问应用程序
    • 一旦应用程序验证了令牌并提取了用户信息,它就会允许用户访问其资源或执行相应的操作。
    • 用户现在可以在这个应用程序中自由操作,而无需再次输入用户名和密码。
  7. 会话管理和注销
    • ADFS和应用程序会管理用户的会话,确保会话的安全性,并在需要时结束会话。
    • 当用户完成与应用程序的交互并希望注销时,可以通过ADFS的注销功能来结束会话,同时清除ADFS和应用程序中的会话信息。

通过这个过程,ADFS提供了一个集中化的身份验证机制,使得用户只需在ADFS中进行一次登录,就可以无缝地访问多个受信任的应用程序和服务,极大地提升了用户体验和安全性。

实现层面,其他受信任的应用程序首次登入时检查ADFS中是否存在用户的会话,如果存在且有该应用程序的访问权限则可以直接访问该应用程序而不需再次登入.

windows Server提供ADFS管理工具(类似IIS)用于配置相关信息。

官方文档参考:AD FS OpenID Connect/OAuth 概念 | Microsoft Learn

### ADFS工作原理和流程详解 #### 一、ADFS概述 Active Directory Federation Services (AD FS) 是一种基于标准的身份验证服务,允许跨不同信任域之间的安全令牌共享。通过这种方式,用户可以使用单一登录(SSO)机制访问多个应用程序和服务。 #### 二、应用场景 当企业内部部署的应用程序需要与外部合作伙伴或云服务提供商建立互信关系时,就可以利用AD FS来实现身份验证的桥接功能[^1]。 #### 三、具体工作流程如下: ##### (一)请求发起阶段 1. 用户尝试访问受保护资源(如Web应用),该应用位于联邦伙伴方。 2. 应用检测到未经过身份验证,则会重定向至客户端浏览器并指向AD FS服务器作为身份提供者(IdP)。 ##### (二)身份验证过程 3. 浏览器向IdP发送HTTP GET请求以获取必要的表单数据用于提交用户名密码等凭证信息给IdP进行本地Windows集成认证或其他形式的身份核验操作。 4. 如果成功完成上述步骤中的身份确认环节之后, IdP将会创建一个包含有关已验证主体声明的安全断言标记语言(SAML)Token 或 JSON Web Token(JWT),并将此token附带于返回给原始请求者的响应之中。 ##### (三)授权决策制定 5. 接收到SAML/JWT token后的依赖方(Relying Party, RP), 将其传递给自己所指定的信任策略处理引擎来进行解析评估;以此判断是否授予特定权限范围内的资源访问权能。 6. 若RP决定接受来自IdP签发的token,则允许最终用户的实际业务交互行为得以继续开展下去。 ```python # Python伪代码展示如何模拟简单的ADFS身份验证流程 class AdfsIdentityProvider: def authenticate_user(self, username, password): # 实现具体的用户身份验证逻辑 pass def adfs_login_flow(username, password): idp = AdfsIdentityProvider() if idp.authenticate_user(username, password): saml_token = generate_saml_token(username) return redirect_to_rp_with_token(saml_token) def generate_saml_token(user_identity): # 创建并签署SAML Token的过程 pass def redirect_to_rp_with_token(token): # 构建带有Token参数的目标URL,并执行跳转动作 pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值