Уведомления промежуточного программного обеспечения OWIN, не вызываемые из каталога MSAL для Azure B2C - PullRequest
1 голос
/ 04 июля 2019

В настоящее время мне трудно понять это ...

У меня есть приложение Azure B2C Angular SPA, которое использует MSAL во внешнем интерфейсе.В бэкэнде это ASP.NET MVC с полной .NET Framework.

У меня было приложение, прекрасно работающее с ADAL во внешнем интерфейсе (приложение SPA) и app.UseWindowsAzureActiveDirectoryBearerAuthentication во внутреннем интерфейсе (ASP.NET MVC).

Сейчас я работаю с Azure B2C и использую MSAL .

Я могу войти с помощью MSAL винтерфейс, но промежуточное ПО, настроенное в серверной части ASP.NET MVC, не будет запускаться.

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
    // Generate the metadata address using the tenant and policy information
    MetadataAddress = String.Format(AadInstance, Tenant, DefaultPolicy),

    ResponseType = OpenIdConnectResponseType.CodeIdToken,

   // These are standard OpenID Connect parameters, with values pulled from web.config
    ClientId = ClientId,
    RedirectUri = RedirectUri,
    PostLogoutRedirectUri = RedirectUri,

    // Specify the callbacks for each type of notifications
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        RedirectToIdentityProvider = OnRedirectToIdentityProvider,
        AuthorizationCodeReceived = OnAuthorizationCodeReceived,
        AuthenticationFailed = OnAuthenticationFailed,
    },

    // Specify the claim type that specifies the Name property.
    TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = "name"
    },

    // Specify the scope by appending all of the scopes requested into one string (separated by a blank space)
    Scope = $"openid profile offline_access user_impersonation"
}
);

В интерфейсе я звоню:

msalService.loginPopup();

$rootScope.$on("msal:loginSuccess", function () {
    console.log("loginSuccess");

    var token = msalService.userInfo.idToken;
});

Я получаю id token и вход происходит успешно ...

Я установил точки останова во всех обработчиках уведомлений в промежуточном программном обеспечении OWIN:

  • OnRedirectToIdentityProvider
  • OnAuthorizationCodeReceived
  • OnAuthenticationFailed

, но отладчик никогда не останавливается на этом, то есть код промежуточного программного обеспечения не вызывается.

Почему не запускаются обработчики уведомлений?Я что-то упустил или использую неправильное промежуточное программное обеспечение?

В конечном итоге я хочу получить возможность извлекать id_token из промежуточного программного обеспечения и выполнять некоторую внутреннюю дополнительную логику \ обработку.Добавление пользовательских утверждений и т. Д. Мне удалось сделать это с помощью ADAL и промежуточного программного обеспечения UseWindowsAzureActiveDirectoryBearerAuthentication, как я упоминал ранее.Сразу после входа в систему у меня была возможность подключиться к уведомлениям промежуточного программного обеспечения.

1 Ответ

0 голосов
/ 04 июля 2019

Ну ... получается, что это приложение, над которым я работаю, испортило файлы cookie во внешнем интерфейсе, и это вызвало некоторый конфликт с токеном, установленным MSAL. Как только я удалил код, связанный с cookie, обработчик уведомлений OWIN был вызван при выполнении запроса XHR.

Я пришел к такому выводу, когда проверил Инструменты разработчика Chrome и увидел, что отправляется неверный заголовок авторизация . Он имел [Object object] в качестве значения.

enter image description here

Однако мне пришлось сменить промежуточное ПО OWIN. Сейчас app.UseOAuthBearerAuthentication:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(string.Format(AadInstance, Tenant, DefaultPolicy))),

    Provider = new OAuthBearerAuthenticationProvider
    {
        OnValidateIdentity = async context =>
        {
            try
            {
                 .
                 .
                 .
            }
        }
    }
}

Теперь OnValidateIdentity срабатывает каждый раз, когда запрос достигает внутреннего сервера, и у меня есть возможность проверить заявки или добавить новые.

...