【发布时间】:2023-01-11 15:17:23
【问题描述】:
我有 2 个 Azure AD 应用程序在 Azure AD 应用程序注册中说 Client-App 和 Server-App。
服务器广告应用程序:
- 在 Azure AD 中注册了一个新的应用程序。
- 设置名为“Search.Address”的应用程序角色,这是自定义角色。
客户广告申请:
- 在 Azure AD 中注册了一个新的应用程序。
- API 权限:添加了在
server-app注册中创建的角色“Search.Address”在client app中作为应用程序权限公开。 - 已成功授予管理员访问权限。
我有使用 .NET 堆栈创建的客户端 Function App,并启用了与 Client-App 关联的系统管理身份。客户端功能应用程序运行代码以使用 ManagedIdentityCredential 获取访问令牌。
令牌创建成功但缺少角色“Search.Address”。
我尝试将 Client-App 作为 API 公开。但没有白费。
托管身份是否有权与服务器对话?我如何使用 approleassignment 分配它?
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.Empty;
try
{
var credential = new ManagedIdentityCredential();
var accessToken = await credential.GetTokenAsync(new TokenRequestContext(scopes: new string[] { "SERVERAPP_ClientID/.default" }) { });
responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. Your Token: {accessToken.Token}";
}
catch (Exception ex)
{
log.LogError(ex.Message+ex.InnerException.Message);
}
return new OkObjectResult(responseMessage);
}
}
参考:
【问题讨论】:
标签: oauth-2.0 azure-active-directory azure-functions access-token azure-managed-identity