как перенаправить после аутентификации с помощью клиента oidc в приложении реакции - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь выполнить аутентификацию с использованием сервера идентификации 4 для моего реагирующего приложения. Я следовал этой документации. Я использую неявный поток сервера идентификации, поэтому приложение onload перейдет на страницу входа на сервер идентификации.после ввода правильного имени пользователя и пароля он проверит и выдаст токен. Все работает, как и ожидалось, но я не могу перенаправить свое приложение реакции на страницу панели инструментов. Я очень новичок, чтобы реагировать, пожалуйста, помогите мне.

  // Copyright (c) Microsoft. All rights reserved.

import Config from 'app.config';
import AuthenticationContext from 'adal-angular/dist/adal.min.js'
import { Observable } from 'rxjs';
import { HttpClient } from 'utilities/httpClient';
import { toUserModel, authDisabledUser } from './models';
import Oidc, { User } from 'oidc-client';

const ENDPOINT = Config.serviceUrls.auth;

export class AuthService {

  //static authContext; // Created on AuthService.initialize()
  //static authEnabled = true;
  //static aadInstance = '';
  //static appId = '00000000-0000-0000-0000-000000000000';
  //static tenantId = '00000000-0000-0000-0000-000000000000';
  //static clientId = '00000000-0000-0000-0000-000000000000';

  static initialize() {
    if (typeof global.DeploymentConfig === 'undefined') {
      alert('The dashboard configuration is missing.\n\nVerify the content of webui-config.js.');
      throw new Error('The global configuration is missing. Verify the content of webui-config.js.');
    }

    if (typeof global.DeploymentConfig.authEnabled !== 'undefined') {
      AuthService.authEnabled = global.DeploymentConfig.authEnabled;
      if (!AuthService.authEnabled) {
        console.warn('Auth is disabled! (see webui-config.js)');
      }
    }

    //AuthService.tenantId = global.DeploymentConfig.aad.tenant;
    //AuthService.clientId = global.DeploymentConfig.aad.appId;
    //AuthService.appId = global.DeploymentConfig.aad.appId;
    //AuthService.aadInstance = global.DeploymentConfig.aad.instance;

    if (AuthService.aadInstance && AuthService.aadInstance.endsWith('{0}')) {
      AuthService.aadInstance = AuthService.aadInstance.substr(0, AuthService.aadInstance.length - 3);
    }

    // TODO: support multiple types/providers
    if (AuthService.isEnabled() && global.DeploymentConfig.authType !== 'aad') {
      throw new Error(`Unknown auth type: ${global.DeploymentConfig.authType}`);
    }

    //AuthService.authContext = new AuthenticationContext({
     // instance: AuthService.aadInstance,
      //tenant: AuthService.tenantId,
      //clientId: AuthService.clientId,
      //redirectUri: "http://localhost:3000/dashboard",
      //expireOffsetSeconds: 300, // default is 120
      //postLogoutRedirectUri: window.location.protocol
    //});
  }

  static isDisabled() {
    return AuthService.authEnabled === false;
  }

  static isEnabled() {
    return !AuthService.isDisabled();
  }

  static onLoad(successCallback) {
    debugger;
    AuthService.initialize();
    if (AuthService.isDisabled()) {
      console.debug('Skipping Auth onLoad because Auth is disabled');
      if (successCallback) successCallback();
      return;
    };
    var config = {
      authority: "http://localhost:5000",
      client_id: "mvc",
      redirect_uri: "http://localhost:3000/dashboard",
      response_type: "id_token token",

      post_logout_redirect_uri : "http://localhost:5003/index.html",
  };
  var mgr = new Oidc.UserManager(config);
  mgr.signinRedirect();


  mgr.getUser().then(function(user){
    if(user){
      console.log("User logged in", user.profile);
    }
    else {
      console.log("User not logged in");
  }
  }); 
  mgr.events.addUserLoaded(function(userLoaded){
    mgr.User=userLoaded;
  })
  mgr.events.addSilentRenewError(function (error){
    console.log('the user has signrd out');
    mgr._user=null;
  })


  //mgr.login();

  //mgr.renewToken();


    // Note: "window.location.hash" is the anchor part attached by
    //       the Identity Provider when redirecting the user after
    //       a successful authentication.
    // if (AuthService.authContext.isCallback(window.location.hash)) {
    //   console.debug('Handling Auth Window callback');
    //   // Handle redirect after authentication
    //   AuthService.authContext.handleWindowCallback();
    //   const error = AuthService.authContext.getLoginError();
    //   if (error) {
    //     throw new Error(`Authentication Error: ${error}`);
    //   }
    // } else {
    //   AuthService.getUserName(user => {
    //     if (user) {
    //       console.log(`Signed in as ${user.Name} with ${user.Email}`);
    //       if (successCallback) successCallback();
    //     } else {
    //       console.log('The user is not signed in');
    //       AuthService.authContext.login();
    //     }
    //   });
    // }
  }

  static getUserName(callback) {
    if (AuthService.isDisabled()) return;

    if (AuthService.authContext.getCachedUser()) {
      Observable.of({ Name:AuthService.authContext._user.userName, Email: AuthService.authContext._user.userName })
        .map(data => data ? { Name: data.Name, Email: data.Email } : null)
        .subscribe(callback);
    } else {
      console.log('The user is not signed in');
      AuthService.authContext.login();
    }
  }

  /** Returns a the current user */
  static getCurrentUser() {
    if (AuthService.isDisabled()) {
      return Observable.of(authDisabledUser);
    }
    return HttpClient.get(`${ENDPOINT}users/current`)
      .map(toUserModel);
  }

  static logout() {
    if (AuthService.isDisabled()) return;

    AuthService.authContext.logOut();
    AuthService.authContext.clearCache();
  }

  /**
   * Acquires token from the cache if it is not expired.
   * Otherwise sends request to AAD to obtain a new token.
   */
  static getAccessToken() {
    debugger;
    if (AuthService.isDisabled()) {
      return Observable.of('client-auth-disabled');
    }

    return Observable.create(observer => {
      return AuthService.authContext.acquireToken(
        AuthService.appId,
        (error, accessToken) => {
          if (error) {
            console.log(`Authentication Error: ${error}`);
            observer.error(error);
          }
          else observer.next(accessToken);
          observer.complete();
        }
      );
    });
  }
}

Проблема, с которой я сталкиваюсь, заключается в том, что после аутентификации мое приложение зацикливается на том, что URL-адрес приложения меняется на идентификационный сервер и локальный URL-адрес приложения. Вы можете видеть, что мое приложение ранее использовало AuthenticationContext от adal. Я хочу изменить наoidc для идентификационного сервера4.

1 Ответ

0 голосов
/ 14 июня 2019

Я вижу, что вы упомянули перенаправление URI в качестве панели инструментов? 'redirect_uri: "http://localhost:3000/dashboard'. Итак, с сервера Identity пользователь будет перенаправлен сюда, верно? Можете ли вы показать нам, что вы делаете на странице панели инструментов?

Как правило, в реализации сервера Identity перенаправление Uri должно быть простой страницей, в обязанности которой входит не что иное, как доступ к токенам с URL-адреса и перенаправление на нужную страницу (например, перенаправление на панель мониторинга отсюда)

Я понимаю, что я дал вам скорее теоретический ответ, но, увидев вашу реализацию перенаправления URL, вы получите лучший ответ.

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