Я пытаюсь аутентифицировать пользователей для службы приложений Azure, написанной на полной версии C # 4.7.2.
Аутентификация выполняется в OpenId в Azure AD.
Хорошо работает при использовании атрибута [Authorize] на контроллере.
Когда я пытаюсь украсить контроллер с помощью атрибута атрибута AuthorizeAttribute, аутентификация больше не основывается на Azure Ad (в облаке или через iisexpress / localhost)
Мне нужно переопределить метод OnAuthorize, поскольку приложение отображает разные данные в зависимости от контекста, и этот контекст должен соответствовать группе безопасности некоторых пользователей.
т.е.
urls / context1 и / context2 воспроизводят один и тот же код, но запросы dbs будут отличаться условием «где контекст = @context». Все URL будут иметь префикс / context1 или /context2.
Вот соответствующий код:
public void ConfigureAuth(IAppBuilder app)
{
//https://azure.microsoft.com/fr-fr/resources/samples/active-directory-dotnet-webapp-groupclaims/
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
string authority = $"https://login.microsoftonline.com/{ConfigurationManager.AppSettings["ida:Tenant"]}";
string client = ConfigurationManager.AppSettings["ida:ClientId"];
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = client,
Authority = authority,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
RoleClaimType = "groups",
},
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = OnRedirectToIdentityProvider,
//MessageReceived = OnMessageReceived,
//SecurityTokenValidated = OnSecurityTokenValidated,
//AuthenticationFailed = OnAuthenticationFailed,
AuthorizationCodeReceived = OnAuthorizationCodeReceived,
//SecurityTokenReceived = OnSecurityTokenReceived
}
});
}
«OnRedirectToIdentityProvider» помогает мне проверить, вызывается ли Azure AD аутентификация.
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext context)
{
//OnRedirectToIdentityProvider has not been called
//Checking that the authenticated user is in the right
//security group to grant access to /context1 or /context2
}
}
Я надеялся, что конфигурация Startup.cs будет вызвана после переопределения OnAuthorize.
Спасибо за вашу помощь.