Приложение Azure AD 2.0 - невозможно получить доступ к области видимости из углового клиента
Я пытаюсь разработать приложение Angular 4 и серверную часть ASP.NET Core 2.0. У меня есть угловое приложение (сгенерированное с помощью Angular-cli) и.net core web api (сгенерированное с использованием шаблона vs 2017). На угловой стороне я использую angular-oauth2-oidc. Я зарегистрировал свое приложение, используя портал регистрации приложений AzureAD (приложения, зарегистрированные как 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"
};
});
Проблема возникает, когда я пытался получить доступ к моему веб-API из клиентского приложения. Если я не запрашиваю свою область видимости ("api:///access_as_user") в угловом формате, 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 репозитории:
Клиент -> филиал oidc
1 ответ
Я могу вызвать веб-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 мультитенант:
Вызовите основной веб-API.net с помощью идентификатора выше, защищающего приложение 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"}
}
});
Ниже приведен пример кода о защите веб-API с помощью приложения Azure AD V2.0. Пример кода для Azure AD B2C, мы можем изменить его полномочия, чтобы он работал для приложения Azure AD V2.0. И, пожалуйста, не стесняйтесь, дайте мне знать, если у вас все еще есть проблема.