Azure AD令牌已经无权限访问其他应用

时间:2017-09-06 12:28:36

标签: azure azure-active-directory

我们在Azure AD中注册了2个应用程序,我们称之为WebApi1和WebApi2。

WebApi1需要调用WebApi2。已在WebApi1中配置密钥以获取令牌。这是我用来获取令牌然后调用WebApi2的代码:

enter image description here

以下是我的WebApi2的配置方式:

enter image description here

我不明白的是,我希望WebApi2返回401异常,因为我没有在Azure中设置任何权限(通过App Registration门户)到WebApi1。

然而,调用成功,WebApi1可以访问WebApi2。

为什么WebApi1在不使用Azure权限的情况下可以访问WebApi2?

2 个答案:

答案 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"],

            });