【发布时间】:2021-04-02 11:48:48
【问题描述】:
我正在尝试创建一个 .NET 控制台应用程序来对 Azure 函数应用的用户进行身份验证。我想使用他们的 AD 凭据对用户进行身份验证,然后基于此创建一个令牌。我相信我需要启用“公共客户流”才能实现这一目标。我对此很陌生,但在多次尝试失败后,我在“公开 API”部分设置了应用程序 ID URI 和范围后设法让它工作。我相信清单将此属性称为“identifierUris”。根据一些发现,公共访问和标识符Uris 不能同时使用。 有没有其他方法可以实现这一目标?任何关于为什么这不理想的解释或推理也将不胜感激。
这是我们用来检索和使用令牌的代码:
var publicClient = PublicClientApplicationBuilder
.Create(clientId)
.WithAuthority(authorityUri)
.WithRedirectUri(redirectUri)
.Build();
var accessTokenRequest = publicClient.AcquireTokenInteractive(scopes);
var accessToken = await accessTokenRequest.ExecuteAsync();
restRequest.AddHeader("authorization", "Bearer " + token);
这是创建 Azure AD 应用程序的 Pulumi 代码,其中 functionApp 是我们尝试授权的 Pulumi.Azure.AppService.FunctionApp:
var azureApp = new AzureAD.Application(name, new AzureAD.ApplicationArgs
{
DisplayName = name,
AvailableToOtherTenants = false,
Homepage = "https://VisualStudio/SPN",
Oauth2AllowImplicitFlow = true,
ReplyUrls = { "http://localhost" },
IdentifierUris =
{
functionApp.DefaultHostname.Apply(dnsName => "https://" + dnsName)
},
PublicClient = true
}, new CustomResourceOptions {DependsOn = functionApp});
当 PublicClient 设置为 false 时,这可以正常部署。当它设置为 true 时,底层 API 调用会返回 400 错误,并带有以下文本:
Property identifierUris is invalid
所以我们将PublicClient设置为false,然后在门户中手动将其更新为true,效果很好:
我们缺少什么?
【问题讨论】:
-
您使用的是哪种身份验证流程?
-
为什么不能同时使用
Public client flows和identifierUris?官方文件中是否有特殊说明? -
@CarlZhao 请查看我为详细说明该问题所做的编辑。我正在与 Mifla 合作。
-
@CarlZhao 我不记得有任何官方文件提到过类似的东西,但请看下面的链接,github.com/Azure/azure-cli/issues/7955#issuecomment-500265900。另请注意,我们没有使用网络平台。
-
您好,您检查我的答案了吗?有用吗?
标签: azure oauth-2.0 azure-active-directory azure-functions pulumi