我有一个简单的ADAL.js'spa'应用based on this sample。它调用的API是同一解决方案的一部分(因此,我不认为这是一个CORS问题,我们在这里都是同一个域..同一个应用程序)
我在AD租户的应用清单文件中设置了一些自定义角色。我将这些角色与一些测试用户帐户相关联。当我运行我的示例并登录时,它会向我反映用户令牌值,这些值表明正确的角色已应用于我决定登录的任何测试用户...
当我调用我们刚刚使用[Authorize]
属性的API时,一切都很好。
例如,这个装饰的控制器,工作正常:
[Authorize]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get(){...omitted....}
}
但是,这给了我'拒绝'的回复(字面意思是:Authorization has been denied for this request
):
[Authorize(Roles = "AdminAccess")]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()(){...omitted....}
}
我做错了什么?部署到Azure以及本地
时似乎失败这是我的Startup.Auth.cs
课程:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app) {
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
});
}
}
}
答案 0 :(得分:2)
您需要定义哪个声明包含角色。这是一个例子:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions()
{
Tenant = Tenant,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ValidAudience,
RoleClaimType = "roles"
}
});
这会导致中间件映射声明中的值&#34;角色&#34;到它创建的主体的角色。