我们可以在不使用 SAS 令牌的情况下通过 c# 代码调用 Azure API 管理吗

Posted

技术标签:

【中文标题】我们可以在不使用 SAS 令牌的情况下通过 c# 代码调用 Azure API 管理吗【英文标题】:Can we call Azure API Management through c# code without using SAS Token 【发布时间】:2020-06-05 05:12:24 【问题描述】:

我已经通过门户在 APIM 实例中配置了 oauth2.0 身份验证。

我还为 APIM 实例创建 AAD 条目。

我也可以通过 APIM 开发者遗留门户生成 jwt 不记名令牌。

但是如何生成 JWT 令牌以从 C# 应用程序调用 APIM 方法。

我想调用 APIM 方法 使用来自 C# 应用程序的 OAUTH2.0 JWT 令牌。

我该怎么做。

如有样品,请提供。

【问题讨论】:

【参考方案1】:

您需要先执行以下步骤:

1) 在 azure ad 中创建应用程序 2) 转到您的 APIM => 访问控制 (IAM) 选项卡 3)添加上面创建的应用程序(需要在APIM中执行此操作) 4) 现在您应该能够在 APIM 访问控制 (IAM) 选项卡中看到 Azure AD 应用程序

然后您应该能够使用客户端 ID 和客户端密码从 Azure AD 获取访问令牌

public class myServiceCredentials : ServiceClientCredentials
   private string AuthenticationToken  get; set;  
   public override void InitializeServiceClient<T>(ServiceClient<T> client)
   
      var authenticationContext = new AuthenticationContext("https://login.windows.net/tenantID");
      var credential = new ClientCredential(clientId: "xxxxx-xxxx-xx-xxxx-xxx", clientSecret: "clientSecret");
     var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", clientCredential: credential);

    if (result == null)
    
        throw new InvalidOperationException("Failed to obtain the JWT token");
    
    AuthenticationToken = result.AccessToken;

【讨论】:

感谢您的回复。我现在使用上面的代码获取 jwt 令牌,但抛出 401 未经授权的问题。我们需要在 APIM 的入站策略中为 使用什么值。早些时候,我使用 login.microsoftonline.com... 作为 我为 apim 创建了一个新的应用广告,并在上面的代码中使用了客户端 ID 和密码。我还在 APIM 的访问控制 (IAM) 下添加了新的应用广告。我还需要在 APIM 中配置什么吗?我需要在 APIM 实例中配置 OAUTH2.0 吗? validate-jwt 策略值应该是什么 我认为最好的选择是参考文档,因为这取决于您的方法(如果您通过查询字符串或标头使用 jwt 令牌)以及您需要的其他选项考虑。看看这个链接,如果你有任何问题,请告诉我 - docs.microsoft.com/en-us/azure/api-management/…

以上是关于我们可以在不使用 SAS 令牌的情况下通过 c# 代码调用 Azure API 管理吗的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SAS 令牌从 C# 连接到 Azure BlobStorage?

我可以在不注册我的自动测试应用程序的情况下在 Azure 上获取访问令牌吗?

如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

解析 JWT 令牌以仅在 C# 或 Blazor 中没有外部库的情况下获取有效负载内容

如果 CSRF Token 通过 Postman 我们可以在不提交表单的情况下获取数据吗

如何在不使用dotnet中的安全令牌(使用soap api)的情况下登录salesforce?