.net core azure函数EasyAuth在ClaimsPrincipal中未正确识别应用程序角色

.net core azure函数EasyAuth在ClaimsPrincipal中未正确识别应用程序角色,.net-core,azure-active-directory,azure-functions,azure-web-app-service,.net Core,Azure Active Directory,Azure Functions,Azure Web App Service,我正在尝试将azure功能与EasyAuth连接起来,因为它是应用服务平台的一部分。在使用azure active directory进行身份验证时,我已经进行了很好的配置,并且可以很好地开箱即用 但因为我也想添加授权,所以我决定使用app_角色来实现这一点 我仍然不能在我的代码中使用它。以下是我在功能应用程序中的唯一功能: 使用制度; 使用System.IO; 使用System.Threading.Tasks; 使用Microsoft.AspNetCore.Mvc; 使用Microsoft.

我正在尝试将azure功能与EasyAuth连接起来,因为它是应用服务平台的一部分。在使用azure active directory进行身份验证时,我已经进行了很好的配置,并且可以很好地开箱即用

但因为我也想添加授权,所以我决定使用app_角色来实现这一点

我仍然不能在我的代码中使用它。以下是我在功能应用程序中的唯一功能:

使用制度; 使用System.IO; 使用System.Threading.Tasks; 使用Microsoft.AspNetCore.Mvc; 使用Microsoft.Azure.WebJobs; 使用Microsoft.Azure.WebJobs.Extensions.Http; 使用Microsoft.AspNetCore.Http; 使用Microsoft.Extensions.Logging; 使用Newtonsoft.Json; 使用System.Security.Claims; 名称空间delme_azf { 公共静态类meh { [功能名称MEH] 公共静态异步任务运行 [HttpTriggerAuthorizationLevel.Function,get,post,Route=null]HttpRequest请求, ILogger日志,ClaimsPrincipal声称 { 字符串名称=请求查询[名称]; req.Headers.TryGetValueX-MS-TOKEN-AAD-ID-TOKEN,out var jwt; 如果索赔为0.IsInRoleshizzl { 返回新的OkObjectResult$shiiIIit{name}{jwt}; } 其他的 { 返回新的OkObjectResult$moeppppp==={jwt}===; } } }
} 但是,您认为它在索赔中的作用是正确的。 根据文档,isinrole并不像您期望的那样工作。它根据类别查找角色类型

每个索赔实体都有自己的索赔类型定义 代表一个角色。可以通过访问和设置此声明类型 ClaimsIdentity.RoleClaimType属性

默认情况下,RoLeCuLyType类似于CalimeStupe。角色在JWT中的声明类型是不匹配的,因此在调用IsInPule

时它不认为它是角色声明。 您可以尝试设置ClaimSideEntity roleclaimtype,也可以使用其他方法(如claims.hasclaimroles,shizzl)搜索索赔。那也行吗


希望这对您有所帮助。

谢谢,这很有帮助:claims.hasclaimroles,如果角色在jwt中,shizzl将返回true,否则返回false