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提出的请求。有两件事是错的:
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");