ADAL ASP.NET MVC и Angular. Войти из ASP .NET MVC - PullRequest
0 голосов
/ 09 мая 2018

У меня уже есть приложение, написанное на ASP.NET MVC. Мы решили написать новые функции внешнего интерфейса в угловых и медленно перевести все внешние интерфейсы в угловые. Но пока мы застряли с Angular и MVC. Проблема, с которой мы сталкиваемся, заключается в том, что когда пользователь входит в систему, вход в систему осуществляется только в частях приложения MVC. Маркер доступа из Azure AD не используется совместно Angular и ASP.NET MVC.

Я установил https://www.npmjs.com/package/adal-angular5

Я могу войти с этим пакетом с угловой страницы, но я хочу повторно использовать регистрацию со стороны MVC. Это возможно?

Я сделал модуль аутентификации

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AuthenticationGuard } from '../services/authenticated.guard';
import { Adal5Service, Adal5HTTPService } from 'adal-angular5';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { OAuthCallbackHandler } from '../oauth-callback/oauth-callback.guard';
import { HttpService } from './http.service';
import { CookieService } from 'angular2-cookie/services/cookies.service';
@NgModule({
    declarations: [],
    imports: [ CommonModule, HttpClientModule ],
    exports: [],
    providers: [
        AuthenticationGuard,
        Adal5Service,
        {
            provide: Adal5HTTPService,
            useFactory: Adal5HTTPService.factory,
            deps: [ HttpClient, Adal5Service ]
        },
        OAuthCallbackHandler
    ],

})
export class AuthenticationModule
{
    constructor(private adalService: Adal5Service)
    {
        this.adalService.init({
            tenant: 'tenant',
            clientId: 'my-id',
            redirectUri: 'mycallback uri',
            postLogoutRedirectUri: 'some redirect uri',
            popUp: true

        });
    }
}

Позже могу позвонить

this.adalService.login();

Это регистрирует меня, но я не хочу заставлять пользователей входить дважды. Как я могу решить это?

1 Ответ

0 голосов
/ 10 мая 2018

AFAIK, ваше MVC-приложение может использовать Microsoft.Owin.Security.OpenIdConnect промежуточное программное обеспечение для проверки подлинности AAD, и вот соответствующее руководство Интеграция Azure AD в веб-приложение с использованием OpenID Connect . При таком подходе зарегистрированные заявки пользователей будут зашифрованы в cookie и возвращены клиенту.

Поскольку вы изменили внешний интерфейс на angular, вам лучше использовать библиотеку ADAL для непосредственного получения access_token или id_token и отправки его в качестве токена-носителя на ваш бэкэнд для аутентификации, а вашему бэкенду необходимо использовать Microsoft.Owin .Security.ActiveDirectory для поддержки проверки подлинности токена-носителя AAD JWT следующим образом:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions
    {
        TokenValidationParameters = new TokenValidationParameters()
        {
            ValidAudience = "{AAD-client-ID}"
        },
        Tenant = "{tenantID}"
    });

Подробности, с которыми можно ознакомиться Начало работы с Azure AD .NET Web API * .

Я могу войти с этим пакетом с угловой страницы, но я хочу повторно использовать регистрацию со стороны MVC. Это возможно?

Вы можете объединить проверку подлинности Cookies и Bearer в приложении ASP.NET MVC. Примечание: Перед аутентификацией Cookie необходимо включить аутентификацию маркера канала-носителя. Если ваш бэкэнд и хост-интерфейс на одном и том же веб-сайте, вы можете повторно использовать куки, я предполагаю, что перед выполнением this.adalService.login();, вы можете попытаться отправить запрос на ваш бэкэнд для проверки того, был ли проверенный куки был выдан браузер. Если вы получаете 200 кодов состояния, вам не нужно входить в свой интерфейс через ADAL, и вы можете установить флаг в своем интерфейсе, чтобы отметить, что текущий пользователь вошел в систему из бэкэнда, Примечание: the cookie может иметь время истечения. Пока вы получаете 401 или ошибку, вам может потребоваться явно выполнить this.adalService.login(); в вашем интерфейсе. При отправке запроса в ваш бэкэнд для получения обычных данных вам может потребоваться проверить флаг входа в систему и добавить заголовок авторизации со значением Bearer <access-token>, когда текущий пользователь отметил как зарегистрированный пользователь из внешнего интерфейса.

Примечание: В приведенном выше сценарии могут возникнуть некоторые проблемы, и вам необходимо решить проблему с access_token или истечением срока действия cookie. Я бы порекомендовал вам использовать только один подход аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...