我正在尝试开发Angular 4应用程序和ASP.NET Core 2.0后端。我有角度应用程序(使用Angular-cli生成)和.net核心web api(使用vs 2017模板生成)。 在角度方面,我使用angular-oauth2-oidc。我在应用程序配置中使用AzureAD app registration portal(app注册为v2.0)注册了我的应用程序,有两个平台Web和Web API。 在Web api平台中,定义了名为" api:/// access_as_user"并且我的应用程序可以访问此范围。
在它的角度方面。在.NET端,有.AddJwtBearer()方法,它配置了权限,受众(clientId)。
services.AddAuthentication(auth =>
{
auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie()
.AddJwtBearer(cfg =>
{
cfg.Authority = "https://login.microsoftonline.com/<tenantId>/v2.0";
cfg.Audience = "<clientId>";
//cfg.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration();
cfg.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = false,
ValidIssuer = "https://login.microsoftonline.com/<tenantId>/v2.0"
};
});
当我尝试从客户端应用程序访问我的web api时出现问题。如果我没有在角度中询问我的范围(&#34; api:/// access_as_user&#34;),则web api返回401未经授权。我问我得到了
"AADSTS65005:The application 'Angular-test' asked for scope 'access_as_user' that doesn't exist on the resource. Contact the app vendor.
Trace+ID: c55338dd-35c8-429b-bfe1-5c48ac030d00
Correlation+ID: a0b4bc2d-7f15-4ca4-9cd5-4fe61999e4d9
Timestamp:+2017-10-24+10:35:56Z""
任何人都有相同/类似的问题吗?
Git存储库:
Client - &gt;分支 oidc
答案 0 :(得分:1)
我可以通过不使用自定义范围来调用web api。以下是供您参考的步骤:
1.使用隐式流程获取令牌,如下所示:
GET: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=id_token&client_id=1e6af2ed-686c-4914-96ed-0cd7b1673cbb&scope=openid&redirect_uri=http%3A%2F%2Flocalhost&nonce=123
2.1 多租户:
使用上面的id_token调用.net核心Web API,以保护Azure AD V2.0应用程序,如下面的代码:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = "https://login.microsoftonline.com/common/v2.0/",
Audience = Configuration["Authentication:AzureAd:ClientId"],
Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
},
TokenValidationParameters=new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer =false,
}
});
});
2.1 根据需要限制租户:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = "https://login.microsoftonline.com/common/v2.0/",
Audience = Configuration["Authentication:AzureAd:ClientId"],
Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
},
TokenValidationParameters=new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer =true,
ValidIssuers=new string[] { "list the allowed issues here","https://login.microsoftonline.com/xxxxxxxx-0e9b-42f8-8b22-3c4a2f1d8800/v2.0"}
}
});
您可以参考下面的代码示例,了解如何使用Azure AD V2.0应用程序保护Web API。代码示例适用于Azure AD B2C,我们可以修改其权限,使其适用于Azure AD V2.0应用。如果您还有问题,请随时告诉我。