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

如何让第三方Ruby客户端无密码认证Azure AD OAuth2.0 Web API

Azure Function App 服务对服务无密码认证的Ruby实现方案

要实现第三方Ruby应用对Azure Function App的服务对服务无密码认证,直接使用Azure AD的**客户端凭证流(Client Credentials Flow)**即可,该流程无需用户名密码、无用户交互,完全基于应用身份完成认证。

前置Azure AD配置确认

  • 确保你的Function App对应的Azure AD应用注册(API端)已暴露API范围,且为第三方Ruby应用的AD注册授予了应用权限(注意不是委托权限,服务对服务场景必须用应用权限),权限需经管理员同意(租户级权限需全局管理员操作)。
  • 第三方Ruby应用的Azure AD注册需生成并保存Client Secret(或使用证书,安全性更高)。

Ruby客户端实现步骤

1. 安装依赖gem

使用oauth2 gem处理OAuth2令牌流程,执行安装命令:

gem install oauth2

2. 认证并调用API的代码示例

require 'oauth2'
require 'net/http'

# 替换为你的实际配置信息
tenant_id = "你的Azure AD租户ID"
client_id = "第三方Ruby应用的Client ID"
client_secret = "第三方Ruby应用的Client Secret"
# Scope格式:API应用的标识符 + .default,对应应用权限的默认范围
scope = "https://ph-bde-uat-ptsocfunapp.azurewebsites.net/.default"

# 初始化OAuth2客户端
oauth_client = OAuth2::Client.new(
  client_id,
  client_secret,
  site: "https://login.microsoftonline.com/#{tenant_id}",
  token_url: "/oauth2/v2.0/token"
)

# 通过客户端凭证流获取访问令牌
access_token = oauth_client.client_credentials.get_token(scope: scope)

# 调用Azure Function API
api_uri = URI("https://ph-bde-uat-ptsocfunapp.azurewebsites.net/api/Quote")
http = Net::HTTP.new(api_uri.host, api_uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(api_uri)
request["Authorization"] = "Bearer #{access_token.token}"

response = http.request(request)
puts "API响应状态: #{response.code}"
puts "API响应内容: #{response.body}"

关键注意事项

  • Scope规则:必须使用API应用注册的标识符拼接.default,这是客户端凭证流中应用权限的固定格式。
  • 安全最佳实践:禁止硬编码Client Secret,建议通过环境变量(如ENV['AZURE_CLIENT_SECRET'])或密钥管理服务读取敏感信息。
  • 可选安全升级:可用证书认证替代Client Secret,oauth2 gem支持通过加载证书文件完成令牌获取,避免Secret泄露风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:55:17