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

如何通过独立Identity Server实例实现APIM授权访问

我已将APIM实例配置为我方暴露的WebAPI的代理,希望通过Postman/.NET Client访问该APIM实例,并强制使用我方独立部署的Identity Server 4实例中配置的client_credentials模式(scope/secret/client_id)进行身份验证。我已查阅大量Stack Overflow帖子但未找到可行方案,对开发者门户的Oauth/OpenID不感兴趣,认为需要在某一APIM产品上配置入站策略,但不知如何操作。能否详细列出所需执行的步骤?相关端点如下:

  • 授权端点:https://myidentityserver.azurewebsites.net/connect/authorize
  • 令牌端点:https://myidentityserver.azurewebsites.net/connect/token
实现步骤详解

1. 在APIM中注册Identity Server 4作为OAuth2身份提供者

  • 登录Azure门户,进入目标APIM实例
  • 左侧导航栏选择安全性 > 身份提供者
  • 点击添加,选择OAuth 2.0类型
  • 填写核心配置项:
    • 名称:自定义标识(例如MyIDSP)
    • 客户端ID:填入Identity Server 4中已配置的客户端ID
    • 客户端密码:填入对应客户端的secret
    • 授权端点:填入你的授权端点地址
    • 令牌端点:填入你的令牌端点地址
    • 范围:填写需要验证的scope(多值用空格分隔)
    • 授权流:勾选客户端凭据
  • 点击创建完成注册

2. 为目标APIM产品添加入站JWT验证策略

  • 进入APIM的产品页面,选择要应用验证的产品(或新建产品)
  • 切换到策略标签页,选择入站处理
  • 点击添加策略,选择验证JWT
  • 配置验证规则:
    • 选择使用OAuth 2.0身份提供者验证令牌,从下拉列表中选刚才注册的MyIDSP
    • 勾选验证令牌签名,确保APIM能验证令牌的合法性
    • 可选配置:设置受众(如果Identity Server 4的令牌包含aud声明,需填入对应值)、开启令牌过期检查、验证issuer等
  • 点击保存,策略会自动应用到该产品下的所有API

3. Postman测试流程

步骤1:获取Access Token

  • 新建POST请求,地址为你的令牌端点
  • 请求头设置Content-Type: application/x-www-form-urlencoded
  • 请求体(form-data格式):
    • grant_type: client_credentials
    • client_id: 你的客户端ID
    • client_secret: 你的客户端secret
    • scope: 配置的目标scope
  • 发送请求,提取返回结果中的access_token

步骤2:调用APIM代理API

  • 新建请求,地址为APIM暴露的API端点
  • 请求头添加Authorization: Bearer {你的access_token}
  • 发送请求:
    • 令牌合法时,正常返回API数据
    • 令牌无效/无权限时,APIM会返回401/403状态码

4. .NET客户端代码示例

using System.Net.Http.Headers;
using System.Text.Json;

// 配置参数
var clientId = "你的客户端ID";
var clientSecret = "你的客户端Secret";
var targetScope = "你的目标Scope";
var tokenEndpoint = "https://myidentityserver.azurewebsites.net/connect/token";
var apimApiUrl = "你的APIM代理API地址";

// 获取AccessToken
using var tokenClient = new HttpClient();
var tokenRequest = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("grant_type", "client_credentials"),
    new KeyValuePair<string, string>("client_id", clientId),
    new KeyValuePair<string, string>("client_secret", clientSecret),
    new KeyValuePair<string, string>("scope", targetScope)
});

var tokenResponse = await tokenClient.PostAsync(tokenEndpoint, tokenRequest);
tokenResponse.EnsureSuccessStatusCode();
var tokenJson = JsonSerializer.Deserialize<JsonElement>(await tokenResponse.Content.ReadAsStringAsync());
var accessToken = tokenJson.GetProperty("access_token").GetString();

// 调用APIM代理API
using var apiClient = new HttpClient();
apiClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var apiResponse = await apiClient.GetAsync(apimApiUrl);
apiResponse.EnsureSuccessStatusCode();

var responseContent = await apiResponse.Content.ReadAsStringAsync();
Console.WriteLine("API响应结果:");
Console.WriteLine(responseContent);

5. 关键注意事项

  • 确保Identity Server 4中的客户端已启用client_credentials授权流,且配置的scope已关联到对应的API资源
  • APIM身份提供者的客户端ID、secret必须与Identity Server 4中的配置完全一致
  • 若需更细粒度的权限控制,可在入站策略中添加检查JWT声明步骤,验证令牌中的特定claim(例如角色、权限)
  • 遇到验证失败时,可通过APIM的监控 > 日志查看具体错误信息,定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:49