You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合Azure AD认证与数据库账号密码登录并获取AD令牌?

解决方案:自定义数据库账号密码登录并获取Azure AD令牌

核心逻辑

你需要先完成自定义数据库账号密码的本地验证,再通过Azure AD的身份关联机制,获取对应用户的带权限角色的ID令牌和访问令牌。核心是将数据库用户与Azure AD用户建立关联,验证自定义凭据后,以关联的Azure AD身份请求令牌。

具体步骤

1. 预准备:数据库用户与Azure AD用户关联

确保你的数据库中每个用户记录,都存储了对应的Azure AD用户标识(比如Object ID或User Principal Name (UPN))。这是后续映射Azure AD身份的关键。

2. 自定义账号密码验证

先执行本地认证逻辑:

  • 接收用户输入的用户名、密码
  • 从数据库查询该用户的加盐哈希密码(禁止明文存储,推荐使用bcrypt/Argon2等强哈希算法)
  • 验证输入密码与存储的哈希值是否匹配
  • 验证通过后,取出该用户关联的Azure AD用户信息(如UPN)

3. 获取Azure AD令牌(两种可行方案)

方案A:客户端凭据流 + On-Behalf-Of(OBO)流(生产环境推荐)

该方案通过后端服务代理,以用户身份获取令牌,支持MFA,符合安全最佳实践:

  1. Azure AD应用配置:
    • 注册后端服务为Azure AD应用,生成客户端密钥(或证书)
    • 为应用添加所需的委托权限(如Microsoft Graph/User.Read、业务API的权限),并授予管理员同意
  2. 后端执行令牌请求:
    • 第一步:用后端应用的客户端凭据获取应用令牌:
      curl -X POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "client_id={backend-app-client-id}" \
        -d "client_secret={backend-app-client-secret}" \
        -d "grant_type=client_credentials" \
        -d "scope=https://graph.microsoft.com/.default"
      
    • 第二步:用应用令牌调用OBO流,获取用户令牌:
      curl -X POST https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
        -d "client_id={backend-app-client-id}" \
        -d "client_secret={backend-app-client-secret}" \
        -d "assertion={backend-app-access-token}" \
        -d "scope={your-api-scope} openid profile" \
        -d "requested_token_use=on_behalf_of"
      
    • 响应会返回id_token(含用户身份信息)和access_token(含用户权限/角色)

方案B:Azure AD B2C自定义策略(面向外部用户场景)

如果你的用户是外部用户,可通过Azure AD B2C自定义策略实现:

  • 配置B2C自定义策略,添加本地账户(数据库存储)的认证流程
  • 集成Azure AD作为身份提供者,在用户用自定义密码登录后,B2C自动颁发包含权限角色的Azure AD兼容令牌
  • 该方案无需后端代理,直接由B2C处理身份映射与令牌颁发

关键注意事项

  • 密码安全:必须使用加盐哈希存储密码,绝对禁止明文或弱加密
  • 权限配置:确保Azure AD中对应的用户已被分配所需的应用角色/权限,否则令牌不会包含这些信息
  • OBO流限制:最多支持3层嵌套,且后端应用需拥有对应权限的管理员同意
  • ROPC流风险:不推荐使用ROPC流(该流不支持MFA,不符合安全规范),仅在极端场景下考虑

内容的提问来源于stack exchange,提问作者Elizabeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:25