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 多租户,.Net Core Web API 与 JWT 令牌
Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API