Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.Azure.Management.Api管理实施_C#_Azure_Azure Api Management - Fatal编程技术网

C# Microsoft.Azure.Management.Api管理实施

C# Microsoft.Azure.Management.Api管理实施,c#,azure,azure-api-management,C#,Azure,Azure Api Management,我正在尝试使用Microsoft.Azure.Management.apimagement4.0.4-preview实现Azure API管理API 没有我看到的实现文档。我尝试了下面的代码。但我得到认证错误 Microsoft.Rest.Azure.CloudException:'身份验证失败。“授权”标题的格式无效。” 通过记录正确的用户名和密码从复制了bear令牌 看来你的生成方式有问题 授权标头应该是一个JSON Web令牌,您可以从Azure Active Directory获得,但直

我正在尝试使用
Microsoft.Azure.Management.apimagement
4.0.4-preview实现Azure API管理API

没有我看到的实现文档。我尝试了下面的代码。但我得到认证错误

Microsoft.Rest.Azure.CloudException:'身份验证失败。“授权”标题的格式无效。”

通过记录正确的用户名和密码从复制了bear令牌

看来你的生成方式有问题

授权标头应该是一个JSON Web令牌,您可以从Azure Active Directory获得,但直接从Azure门户获得。有关更多详细信息,请参阅此


有关如何从AAD和API管理部门获得JWT的信息,请参阅此文档。

经过两周的努力,我们找到了Microsoft.Azure.Management.ApiManagement的方法 dll实现

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

这将为在Azure AD中创建的应用程序提供委派权限

我们可以使用客户端凭据流获取Azure AD的委托访问令牌。 将范围用作

下面给出了为Microsoft.Azure.Management.ApiManagement dll实现客户端凭据流的示例代码

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;
    }
}
公共类myServiceCredentials:ServiceClientCredentials{
私有字符串身份验证令牌{get;set;}
公共覆盖无效初始化ServiceClient(ServiceClient客户端)
{
var authenticationContext=new
AuthenticationContext(“https://login.windows.net/{tenantID}”);
var凭证=新的客户端凭证(客户端ID:“xxxxx-xxxx-xx-xxxx-xxx”,
clientSecret:“{clientSecret}”);
var result=authenticationContext.AcquireToken(资源:
"https://management.core.windows.net/“,客户端凭据:凭据);
如果(结果==null)
{
抛出新的InvalidOperationException(“未能获取JWT令牌”);
}
AuthenticationToken=result.AccessToken;
}
}

谢谢你

@Joseph,我对未经授权的回复也有同样的问题。检查了通过ApiManagementClient提出的请求。有两件事是错的:

  • 错误的url
  • 缺少授权标头
  • 通过执行以下操作更正此问题:

    var credentials = new MyCredentials();
    var client = new ApiManagementClient(new Uri("https://management.azure.com/"), credentials);
    client.SubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    client.HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + credentials.AuthenticationToken);
    var result = await client.User.ListByServiceAsync("resource-group", "service");
    

    MyCredentials看起来与前面响应中的myServiceCredentials类相同,它继承自ServiceClientCredentials。但是,我必须公开AuthenticationToken道具。

    我的问题是关于如何实现Microsoft.Azure.Management.ApiManagement 4.0.4-preview dll。我真的不明白你的答案。我的意图是以编程方式针对azure api管理服务执行一些活动。但你说的是azure ad.cacheId,它是什么?我在哪里可以得到它?缓存密钥。缓存实体的标识符。请帮助我,谢谢。你如何调用它?在你以某种方式创建了Rest客户端对象之后?@Vetrivel,除了你指定的东西之外,还有什么我们需要配置的吗?我遇到了一个问题。我们是否需要在APIM中配置Validate JWT策略。不要忘记在APIM管理客户端中使用
    AccessToken
    ,如下所示:
    client.SubscriptionId=“xxxxxxxx-xxxx-xxxx-xxxx-XXXXXXXXXXXXXXXXXXXXXXXX”;client.HttpClient.DefaultRequestHeaders.Add(“授权”、“承载人”+凭证.AuthenticationToken)查看我对Github问题的评论:要获得更清晰的解决方案,我不理解“错误的url”。你是说
    新Uri(“https://management.azure.com/”
    ?默认情况下,这在包中设置(版本6.0.0预览)
    var credentials = new MyCredentials();
    var client = new ApiManagementClient(new Uri("https://management.azure.com/"), credentials);
    client.SubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    client.HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + credentials.AuthenticationToken);
    var result = await client.User.ListByServiceAsync("resource-group", "service");