我们在Azure AD中注册了2个应用程序,我们称之为WebApi1和WebApi2。
WebApi1需要调用WebApi2。已在WebApi1中配置密钥以获取令牌。这是我用来获取令牌然后调用WebApi2的代码:
以下是我的WebApi2的配置方式:
我不明白的是,我希望WebApi2返回401异常,因为我没有在Azure中设置任何权限(通过App Registration门户)到WebApi1。
然而,调用成功,WebApi1可以访问WebApi2。
为什么WebApi1在不使用Azure权限的情况下可以访问WebApi2?
答案 0 :(得分:0)
您的web api应用程序应使用IsInRole()或[Authorize]属性检查访问权限。如果您的web api未检查访问权限,则默认情况下,没有应用程序角色(权限)的访问令牌可以访问您的Web API。
请参阅文件Roles based access control in cloud applications using Azure AD。由于您正在获取具有应用程序标识(客户端凭证流)的令牌,请查看文档中的Assigning client applications to application roles of resource APIs
部分。
答案 1 :(得分:0)
另一件事。
如果您正在使用Azure和角色,则在设置WindowsAzureActiveDirectoryBearerAuthenticationOptions时,您需要设置正确的角色类型,以便IsInRole(或授权(“YourRole”))能够正常工作。
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = false,
ValidAudience = ConfigurationManager.AppSettings["AzureAd:Audience"],
RoleClaimType = System.Security.Claims.ClaimTypes.Role
},
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
Tenant = ConfigurationManager.AppSettings["AzureAd:Tenant"],
});