Azure AD 和 Identity Server4 客户端身份验证和授权

使用 React 和 IdentityServer4 进行身份验证

1.安装所需的库

npm install oidc-client

2.配置 IdentityServer4 客户端

在 IdentityServer4 中,需要配置一个客户端来使用 OpenID Connect 协议进行身份验证。客户端需要配置客户端 ID、客户端秘钥、重定向 URI 和要请求的 scope,如:

new Client
{
    ClientId = "react-app",
    ClientName = "React Application",
    AllowedGrantTypes = GrantTypes.Code,
    RequireConsent = false,
    RedirectUris = { "http://localhost:3000/callback.html" },
    PostLogoutRedirectUris = { "http://localhost:3000/" },
    AllowedScopes = { "openid", "profile" },
    ClientSecrets = new List<Secret>
    {
        new Secret("your_client_secret".Sha256())
    },
    AllowAccessTokensViaBrowser = true
};

3.在 React 中配置 OpenID Connect 客户端

import { UserManager } from 'oidc-client';

const userManager = new UserManager({
    authority: 'http://localhost:5000',
    client_id: 'react-app',
    redirect_uri: 'http://localhost:3000/callback.html',
    response_type: 'code',
    scope: 'openid profile',
    post_logout_redirect_uri: 'http://localhost:3000/',
    monitorInterval: 10000,
    checkSessionInterval: 2000,
    automaticSilentRenew: true,
    filterProtocolClaims: true,
    loadUserInfo: true
});

// 若要登录,请使用以下代码:
userManager.signinRedirect();

// 若要注销,请使用以下代码:
userManager.signoutRedirect();

authority 参数是 IdentityServer4 实例的 URL。client_id 参数是在 IdentityServer4 中配置的客户端 ID。redirect_uri 参数是在 IdentityServer4 中配置的回调 URL。response_type 参数是 code,表示使用授权码模式。scope 参数指定要请求的 scope。post_logout_redirect_uri 参数是注销后要重定向的 URL。monitorIntervalcheckSessionInterval 参数分别用于轮询客户端会话状态和检查用户会话状态。automaticSilentRenew 参数用于启用自动静默更新。filterProtocolClaims 参数表示使用令牌的协议声明,loadUserInfo 参数表示加载用户信息。

4.处理身份验证回调
定义了一个名为 Callback 的组件来处理身份验证回调

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import Callback from './Callback';

const App = () => {
    return (
        <BrowserRouter>
            <Switch>
                <Route path="/callback.html" component={Callback} />
                {/* 其他路由 */}
            </Switch>
        </BrowserRouter>
    );
};

export default App;

使用 React 和Azure AD 进行身份验证

使用 React 和 Azure AD 进行身份验证可以使用 OpenID Connect 和 Microsoft 身份验证库 for JavaScript (MSAL.js)来完成。
1.安装所需的库

npm install msal

2.配置 Azure AD 应用程序

Azure AD 应用程序需要具有适当的设置,以接受来自 React 应用程序的请求。需要为 Azure AD 应用程序配置重定向 URI、获取的 scopes 和访问令牌等内容。例如:

{
   "appId": "your_app_id_here",
   "appSecret": "your_secret_here",
   "redirectUri": "http://localhost:3000",
   "scopes": ["User.Read"],
   "authority": "https://login.microsoftonline.com/your_tenant_id_here"
}

2.在 React 中配置 MSAL.js

import { PublicClientApplication } from "@azure/msal-browser";

const msalConfig = {
  auth: {
    clientId: "your_client_id_here",
    authority: "https://login.microsoftonline.com/your_tenant_id_here",
    redirectUri: "http://localhost:3000",
  },
  cache: {
    cacheLocation: "sessionStorage",
  },
};

const msalInstance = new PublicClientApplication(msalConfig);

export default msalInstance;

clientId 是 Azure AD 应用程序的 ID,authority 是 https://login.microsoftonline.com/ 加上Azure AD 租户 ID。redirectUri 是 React 应用程序的回调 URL。此外,将cacheLocation设置为“sessionStorage”,这意味着令牌信息只会在浏览器窗口或浏览器标签关闭时才会失效。
4.处理身份验证回调

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import { MsalAuthenticationTemplate, useMsal } from "@azure/msal-react";
import { Loading } from "./components";
import { HomePage, ProfilePage } from './pages';

const ProtectedRoute = ({ children, ...rest }) => {
    const { instance, accounts, inProgress } = useMsal();
    const isAuthenticated = accounts.length > 0;
    if (inProgress === "loginRedirect" || inProgress === "acquireTokenRedirect") {
        return <Loading />;
    }

    return (
        <Route {...rest}>
            {isAuthenticated ? (
                children
            ) : (
                instance.loginRedirect({
                    scopes: ["openid", "profile"],
                })
            )}
        </Route>
    );
};

const App = () => {
    return (
        <BrowserRouter>
            <MsalAuthenticationTemplate>
                <Switch>
                       <Route exact path="/">
                           <HomePage />
                       </Route>
                       <ProtectedRoute exact path="/profile">
                           <ProfilePage />
                       </ProtectedRoute>
                </Switch>
            </MsalAuthenticationTemplate>
        </BrowserRouter>
    );
};

export default App;

使用 MsalAuthenticationTemplate 包装了我们的路由,以便我们可以利用 useMsal hook 来获取 instance,并通过 instance.loginRedirect() 方法登录用户。

相关推荐

  1. Azure AD Identity Server4 客户身份验证授权

    2024-01-26 18:22:01       26 阅读
  2. 身份验证授权比较】

    2024-01-26 18:22:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 18:22:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 18:22:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 18:22:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 18:22:01       20 阅读

热门阅读

  1. 静态函数的定义与申明

    2024-01-26 18:22:01       30 阅读
  2. 多旋翼无人机能够在空中悬停

    2024-01-26 18:22:01       31 阅读
  3. linux系统nginx工具接口压力测试工具和关联php页面

    2024-01-26 18:22:01       33 阅读
  4. 测试用例相关问题

    2024-01-26 18:22:01       27 阅读
  5. uni-app 国际化

    2024-01-26 18:22:01       35 阅读
  6. html转换成图片

    2024-01-26 18:22:01       32 阅读
  7. AcWing 5460. 连续整数序列【哈希dp】

    2024-01-26 18:22:01       37 阅读
  8. spring(二):基于注解实现依赖注入

    2024-01-26 18:22:01       30 阅读
  9. C++提高编程——STL:函数对象

    2024-01-26 18:22:01       28 阅读
  10. 题记(30)--排名

    2024-01-26 18:22:01       32 阅读
  11. ArkTs 语法学习 ---- 组件相关装饰器

    2024-01-26 18:22:01       29 阅读
  12. SQL 系列教程(五)

    2024-01-26 18:22:01       28 阅读