【发布时间】:2023-03-16 10:30:01
【问题描述】:
我的头撞墙已经有一段时间了。
调用 ASP.NET Web API 的桌面 WPF 应用程序。
我在 ASP.NET 应用程序上使用 [AUTHORIZE] 注释。这就是问题开始的地方。
从 WPF 应用程序使用 MSAL。
static App()
{
_clientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
.WithDefaultRedirectUri()
.Build();
}
ClientId 是指桌面应用在 Azure 中的应用注册。
string[] scopes = new string[] { "api://****-f56f-4cec-a771-dbdb5d43f047/access_as_user" };
var accounts = await App.PublicClientApp.GetAccountsAsync();
AuthenticationResult authResult;
try
{
authResult = await App.PublicClientApp
.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (Exception)
{
authResult = await App.PublicClientApp
.AcquireTokenInteractive(scopes)
.ExecuteAsync();
}
Web api 的应用程序注册也在那里。我已通过“公开 API”设置范围,并授予桌面应用程序调用 Web api 的委托权限。
当我打电话时我得到了
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers
我可以调用非 AUTHORIZE 端点没问题,所以 api 工作正常。 我无休止地浏览了 MSAL 文档。
我不确定的事情。 清单中的 AppRoles。 除了添加到清单之外,他们是否需要在任何地方获得授权? 我是否将应用服务 (Web api) 保留为“在应用服务应用上启用了匿名访问”。不会提示用户登录。 MSAL 是否会处理这些问题。 我假设您可以使用 MSAL 代码或通过 AD(身份验证/授权)保护 api
我已经把自己挖了一个洞,现在可以看到外面,所以请原谅我。 谢谢
【问题讨论】:
标签: c# wpf azure asp.net-web-api msal