ReactでMSALを使用する方法は?

Konzy262

近いかもしれませんが、msal.jsライブラリをreactで動作させることができません

Microsoft経由でログインした後、コールバックにリダイレクトされますが、URLにコードが含まれています。

http://localhost:3000/authcallback#code=0.AQsAuJTIrioCF0ambVF28BQibk37J9vZQ05FkNq4OB...etc

interaction.statusローカルストレージキーがスタックしているinteraction_in_progress

リダイレクトフローを使用していますが、必要なコールバックの登録方法に問題があると思われます。

これが私のラッパークラスです AuthService.ts

export class AuthService {
    msalClient: PublicClientApplication;
    loginRequest: RedirectRequest;
    account: AccountInfo | null;

    constructor(configuration: Configuration, loginScope: string) {
        this.msalClient = new PublicClientApplication(configuration);
        this.loginRequest = {
            scopes: [loginScope, "openid", "profile"],
        };
        this.account = null;
    }

    loadAuthModule(): void {
        this.msalClient
            .handleRedirectPromise()
            .then((resp: AuthenticationResult | null) => {
                if (resp) {
                    this.handleResponse(resp);
                }
            })
            .catch(console.error);
    }

    handleResponse(response: AuthenticationResult) {
        if (response !== null) {
            store.dispatch(signIn(response.account));
        }
    }

    signIn(): void {
        this.msalClient.loginRedirect(this.loginRequest);
    }

    signOut(): void {
        this.msalClient.logout();
    }

    async getIdentity(): Promise<AuthenticationResult | null> {
        // Stuff
    }
}

これが私の設定ラッパークラスです

export class AuthConfig {
    configuration: Configuration;
    loginScope: string;

    constructor(clientId: string, authority: string, redirectUrl: string, loginScope: string) {
        this.loginScope = loginScope;
        this.configuration = {
            auth: {
                clientId: clientId,
                authority: authority,
                redirectUri: redirectUrl,
                navigateToLoginRequestUrl: false,
            },
            cache: {
                cacheLocation: "localStorage",
                storeAuthStateInCookie: false,
            },
            system: {
                loggerOptions: {
                    loggerCallback: (level: any, message: any, containsPii: any) => {
                        if (containsPii) {
                            return;
                        }
                        switch (level) {
                            case LogLevel.Error:
                                console.error(message);
                                return;
                            case LogLevel.Info:
                                console.info(message);
                                return;
                            case LogLevel.Verbose:
                                console.debug(message);
                                return;
                            case LogLevel.Warning:
                                console.warn(message);
                                return;
                        }
                    },
                },
            },
        };
    }
}

次に、サイトの最初のページである私のログインページで...

export let authService = {} as AuthService;

const LoginPage: React.FC<RouteComponentProps> = ({}) => {

    useEffect(() => {
        const config = new AuthConfig(
            (window as any).ENV.CLIENT_ID,
            (window as any).ENV.AUTHORITY,
            (window as any).ENV.REDIRECT_URL,
            (window as any).ENV.LOGIN_SCOPE
        );

        authService = new AuthService(config.configuration, config.loginScope);  
        authService.loadAuthModule();    
    }, [])

    const signIn = () => {
        authService.signIn();
    };

    return (    
        <Button onClick={() => signIn()}>Sign In</Button>          
    );
};

export default LoginPage;

私の設定の詳細は正しいです。それらが正しくなければ、私はできる限り遠くまで行くことはできないと思います。

ここでどこが間違っているのですか?

私が見たすべての例には、構成の値がハードコードされていますが、これはあまり安全ではないようconfig.jsです。したがって、ファイルからそれらを挿入しようとしています。グローバルにアクセス可能なmsalインスタンスを維持しながら、これを行う方法についての提案を受け付けています。

jasonnutter

公式のMsalReactラッパーの最初のアルファ版をリリースしました。https//github.com/AzureAD/microsoft-authentication-library-for-js/releases/tag/msal-react-v1をご覧ください。 0.0-alpha.0

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Reactで使用するときにmsalで動的ログインを実装する方法はありますか?

MSAL.jsでLocalStorageを使用する方法

msal-browserでMicrosoftGraphToolkitを使用する

ReactでPaperJを使用する方法は?

React HooksでcomponentWillMount()を使用する方法は?

React HooksでcomponentWillMount()を使用する方法は?

reactでfontawesomeを使用する方法は?

ReactでIntersectionObserverを使用する方法は?

ReactでsetIntervalを使用する方法は?

React:AddListener()でsetStateを使用する方法は?

React NativeでcomponentWillUnmountを使用する方法は?

React内でanimejsを使用する方法は?

react-error-boundaryをreactで適切に使用する方法は?

react-native-vector-iconsをreact-native-webで使用する方法は?

IOSでfontStyleを使用する方法は?(React-Nativeを使用)

ReactでJqueryを使用する正しい方法は何ですか?

MSALでAngularアプリのログを無効にする方法

MSALのredirectUriで相対URLを使用するにはどうすればよいですか?

ADALの代わりにMSALでIntuneiOS SDKを使用するにはどうすればよいですか?

reactで異なるルートを使用する方法は?

MSALトークン「Unauthorized」でKeyVaultClientを使用する

reactでleaflet.heatを使用する方法はありますか?

React Memo with Flowを使用する適切な方法は何ですか?

ReactでWavifyを使用する方法はありますか?

Reactでaxiosを使用して状態を更新する方法は?

Linkを使用してdivをreactでラップする方法は?

react-nativeでImageBackgroundを使用してgifを再生する方法は?

MSALを使用してAzureAD V1トークンを取得することは可能ですか?

MSALのAcquireTokenSilentAsyncで使用するIUser

TOP 一覧

  1. 1

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  2. 2

    PictureBoxで画像のブレンドを無効にする

  3. 3

    HTTPヘッダー 'SOAPAction'の値はサーバーによって認識されませんでした

  4. 4

    レスポンシブウェブサイトの一番下にスティッキーなナビゲーションバーを作成するのに問題がある

  5. 5

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  6. 6

    Ansibleで複数行のシェルスクリプトを実行する方法

  7. 7

    Python / SciPyのピーク検出アルゴリズム

  8. 8

    ZScalerと証明書の問題により、Dockerを使用できません

  9. 9

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  10. 10

    tf.nn_conv2dとtf.nn.depthwise_conv2dの違い

  11. 11

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    テキストフィールドの値に基づいて UIslider を移動します

  14. 14

    amCharts 4で積み上げ棒グラフの輪郭を描く方法は?

  15. 15

    MLでのデータ前処理の背後にある直感

  16. 16

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  17. 17

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  18. 18

    Officeアドインを使用してOutlookの連絡先のリストにプログラムでアクセスすることは可能ですか?

  19. 19

    モジュラーJava Webアプリケーションを作成する最良の方法は何ですか

  20. 20

    Chromeウェブアプリのウェブビューの高さの問題

  21. 21

    ezdxf pythonパッケージを使用して既存のdxfファイルを変更するにはどうすればよいですか?

ホットタグ

アーカイブ