Как стать автором
Обновить

Сказ о том, как я настраивал Azure AD B2C на React и React Native Часть 3 (Туториал)

Время на прочтение3 мин
Количество просмотров2.7K
image

Предисловие


Продолжение цикла по работе с Azure B2C. В данной статье я расскажу о том, как подключить аутентификацию на React JS.

Ссылки на связанные посты


ШАГ 1


Необходимо установить react-aad-msal (npm i react-aad-msal).

Добавить в каталог public пустой файл auth.html

ШАГ 2


Создать файл auth-provider.ts в папке ./src
Также нужно проверить, что в Azure B2C во вкладке Разрешения API предоставлено согласие администратора для openid и profile.

  import { MsalAuthProvider, LoginType } from 'react-aad-msal';
  import { Configuration } from 'msal/lib-commonjs/Configuration';
  
  // Msal Configurations
  export const config = (azurePolicy: string): Configuration => ({
    auth: {
      authority: `https://yourcompany.b2clogin.com/yourcompany.onmicrosoft.com/${azurePolicy}`, // azurePolicy = Название политики, на которую нужно перенести пользователя (об этом дальше)
      validateAuthority: false,
      clientId: '777aaa77a-7a77-7777-bb77-8888888aabc', // ClientID вашего приложения Azure AD B2C
    },
    cache: {
      cacheLocation: 'localStorage',
      storeAuthStateInCookie: false, // Лучше оставить false иначе кукисы имеют свойство накапливаться, что приводит к ошибке 431
    },
  });
  
  // Authentication Parameters
  // Обязательно укажите полный путь, иначе не будет работать acquire silent token
  // UPD!! если не срабатывает accquireTokenSilently - нужно заменить scopes на
  // scopes: ['777aaa77a-7a77-7777-bb77-8888888aabc']
  const authenticationParameters = {
    scopes: [
      'https://myapp.onmicrosoft.com/777aaa77a-7a77-7777-bb77-8888888aabc/openid', 
      'https://myapp.onmicrosoft.com/777aaa77a-7a77-7777-bb77-8888888aabc/profile',
    ],
  };
  
  // Options
  export const options = {
    loginType: LoginType.Redirect,
    tokenRefreshUri: `${window.location.origin}/auth.html`,
  };
  
  export const authProvider = (customConfig: Configuration): MsalAuthProvider => new MsalAuthProvider(customConfig, authenticationParameters, options);

Где брать названия политик вы можете увидеть на скриншоте
image

ШАГ 3


В файле index.tsx нужно обработать сценарии по которым пользователь будет заходить в ваше приложение.

  import * as React from 'react';
  import * as ReactDOM from 'react-dom';
  import { Provider } from 'react-redux';
  import { AzureAD, AuthenticationState, IAzureADFunctionProps } from 'react-aad-msal';
  import { authProvider, config } from './auth-provider';
  import App from './App';

  const store = configureStore();

  const unauthenticatedFunction = () => (
  // Переносим пользователя на страничку "Восстановление пароля" 
  // указав соответствующую политику
  <AzureAD provider={authProvider(config('B2C_1A_PasswordReset'))}>
    {
      ({
        login, logout, authenticationState, error, accountInfo,
      }: IAzureADFunctionProps): React.ReactElement | void => {
        switch (authenticationState) {
          default:
            login();
            return <h1>Loading...</h1>;
        }
      }
    }
  </AzureAD>
);
ReactDOM.render(
  <Provider store={store}>
    // Переносим пользователя на страницу авторизации
    <AzureAD provider={authProvider(config('B2C_1A_signup_signin'))} reduxStore={store}>
      {
        ({
          login, logout, authenticationState, error, accountInfo,
        }: IAzureADFunctionProps): React.ReactElement | void => {
          switch (authenticationState) {
            case AuthenticationState.Authenticated:
              console.log(accountInfo); // Данные пользователя + JWT Token
              return <App />;
            case AuthenticationState.Unauthenticated:
              if (!accountInfo && !error) {
                login();
              }
              if (!accountInfo && error) {
                // Переносим пользователя на восстановление пароля если 
                // он вернулся с ошибкой AADB2C90118
                if (error.errorMessage.includes('AADB2C90118')) {
                  return unauthenticatedFunction();
                }
                // Действие, когда пользователь возвращается не авторизированным
                // (Например когда нажмет кнопку "Забыл пароль" а потом нажал кнопку "Отмена")
                if (error.errorMessage.includes('AADB2C90091')) {
                  login();
                }
              }
              console.log('ERROR', error);
              return <h1>Not authorized</h1>;
            case AuthenticationState.InProgress:
              return <h1>In progress</h1>;
            default:
              return <h1>Default</h1>;
          }
        }
      }
    </AzureAD>
  </Provider>,
  document.getElementById('root'),
);

registerServiceWorker();

ШАГ 4


Переходим на Azure AD B2C во вкладку «Регистрация приложений» и выбираем приложение которое Вы хотите использовать, кроме:

IdentityExperienceFramework и ProxyIdentityExperienceFramework.
Если вы еще не создали приложение, то пройдите шаг «Базовые пользовательские потоки»

Далее переходим в проверку подлинности и добавляем следующие URI:




Заключение


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

Спасибо за внимание!
Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Публикации

Работа

Ближайшие события