此请求的授权已被拒绝 - 桌面到 ASP.NET Web API

Posted

技术标签:

【中文标题】此请求的授权已被拒绝 - 桌面到 ASP.NET Web API【英文标题】:Authorization has been denied for this request - Desktop to ASP.NET Web API 【发布时间】:2020-09-13 00:26:34 【问题描述】:

我的头撞墙已经有一段时间了。 调用 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

我已经把自己挖了一个洞,现在可以看到外面,所以请原谅我。 谢谢

【问题讨论】:

【参考方案1】:

请看:https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad#-configure-with-advanced-settings

在该文件的顶部有一条说明:

Note
The express settings flow sets up an AAD V1 application registration. If you wish to use Azure Active Directory v2.0 (including MSAL), please follow the advanced configuration instructions.

基本上意味着您不能真正将 msal 与 express 设置一起使用。但可以用高级。

然后它下面的部分描述了在向应用服务添加 api 权限方面您需要为桌面应用执行的操作。

希望这能让您走上正轨,如果不是,请进一步评论,我会尽力提供帮助。

【讨论】:

以上是关于此请求的授权已被拒绝 - 桌面到 ASP.NET Web API的主要内容,如果未能解决你的问题,请参考以下文章

自托管 owin 应用程序中的混合授权(Windows NTLM 和匿名)不起作用 - “此请求的授权已被拒绝”

如何在 web api Authentication Failed 场景中获取详细错误而不是“消息”:“此请求的授权已被拒绝。”?

Azure AD 与 Web API 的不记名令牌身份验证无法正常工作并抛出错误,因为“此请求的授权已被拒绝”。

ASP.NET - ORA-04068: 包的现有状态已被丢弃

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限

关于远程桌面登陆提示 连接被拒绝,因为没有授权此用户账号进行远程登录