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

Posted

技术标签:

【中文标题】Azure AD 与 Web API 的不记名令牌身份验证无法正常工作并抛出错误,因为“此请求的授权已被拒绝”。【英文标题】:Azure AD with Bearer token authentication for Web API not working throwing error as "Authorization has been denied for this request." 【发布时间】:2020-11-15 03:29:34 【问题描述】:

一个菜鸟问题。

我使用 Git 站点 [https://github.com/Azure-Samples/ms-identity-aspnet-webapi-onbehalfof/tree/master/TodoListService] 中的示例为 Web APi 开发了 Azure Ad 身份验证 我一直面临 Azure 广告身份验证问题。 请在下面找到代码。

Controller1 类的动作方法。

   [RoutePrefix("api/hospitals")]
   public class HospitalsController : ApiController
   
    [Route("GetAll")]
    [HttpGet]
    [PmAuthorize(Constants.Roles.Admin,Constants.Roles.Doctor)]
    public async Task<IEnumerable<hospitals>> GetAll()
     
      //return data;....
    
    

我的 startup.auth.cs 文件

    public partial class Startup
    
    string clientId = System.Configuration.ConfigurationManager.AppSettings["ClientId"];

    string redirectUri = System.Configuration.ConfigurationManager.AppSettings["RedirectUri"];

    static string tenant = System.Configuration.ConfigurationManager.AppSettings["Tenant"];

    string authority = String.Format(System.Globalization.CultureInfo.InvariantCulture, System.Configuration.ConfigurationManager.AppSettings["Authority"], tenant);
     public void ConfigureAuth(IAppBuilder app)
    
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
           new WindowsAzureActiveDirectoryBearerAuthenticationOptions
           
               Tenant = tenant,
               TokenValidationParameters = new TokenValidationParameters  SaveSigninToken = true, ValidAudience = "clientid" 
           );
    
  

WebApiConfig.cs

 public static class WebApiConfig
  
    public static void Register(HttpConfiguration config)
    
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );

        config.Filters.Add(new ExceptionHandlingAttribute());
        
       

当我通过传递令牌从医院控制器调用操作方法/api 方法调用时,得到错误为“此请求的授权已被拒绝。”

有人可以帮我吗?

如果需要任何附加信息,请添加任何 cmets ?

提前致谢。

【问题讨论】:

您是自定义属性还是PmAuthorize 打错了? @Crowcoder 在 PmAuthorize 中我们继承了角色的 Authorize 属性 您是否提供了所需的权限并同意了他们?能否请您提供相关 ID 和时间戳 您还在为这个问题寻求帮助吗? 【参考方案1】:

这是我的一个错误。

我必须在“PmAuthorize”属性中添加几行代码来为用户指定角色。

这给了我答案。

【讨论】:

以上是关于Azure AD 与 Web API 的不记名令牌身份验证无法正常工作并抛出错误,因为“此请求的授权已被拒绝”。的主要内容,如果未能解决你的问题,请参考以下文章

401 使用 Azure AD 在 .NET Core 3.1 中仅使用不记名令牌进行身份验证

用于多个 WebApi 端点的 Azure AD 不记名令牌?

在控制台应用程序中验证 Azure AD 不记名令牌

Azure AD 多租户,.Net Core Web API 与 JWT 令牌

Angular 中的不记名令牌

Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API