在现代 Web 应用程序中,安全性是至关重要的。针对不同的 Web 应用程序,各种各样的认证方案确保了用户数据的安全和完整性。Azure Active Directory(Azure AD)是一个非常流行的身份验证和授权方案,可以让你在 Web 应用程序中轻松地进行用户认证。在本文中,我们将学习如何在 Koa2 中使用 Azure AD 进行用户认证。
1. 为应用程序注册 Azure AD 应用
首先,在 Azure 门户中注册一个 Azure AD 应用。这样可以为你的应用生成必要的凭据,并且确保你的应用可以访问 Azure AD。
- 登录 Azure 门户并选择你的目录。
- 转到 Azure Active Directory。
- 选择“应用程序注册”并注册一个新的应用程序。
- 为应用程序选择“Web 应用程序/API”,并填写相关信息。
- 在“许多角色”部分中添加“应用程序权限”,并选择你需要的权限。
- 点击“注册”,完成应用程序的注册。
完成后,你将获得一个应用程序 ID 和一个机密,这些将用于验证和授权你的 Web 应用程序。
2. 安装依赖项
我们需要一些依赖项来在 Koa2 中使用 Azure AD 进行用户认证。这里使用的是@azure/msal-node库。可通过 npm 安装它。
npm install @azure/msal-node
3. 建立连接
用 Azure AD 进行用户认证需要一些设置和配置。在 Koa2 中使用 Azure AD 进行用户认证,需要建立连接和启动服务。以下是关于如何建立连接和启动服务的代码示例。
// www.javascriptcn.com code example
import Koa from 'koa';
import session from 'koa-session';
import KeyGrip from 'keygrip';
import msal from '@azure/msal-node';
const app = new Koa();
const config = {
auth: {
clientId: 'your_client_id',
authority: 'https://login.microsoftonline.com/your_tenant_id',
clientSecret: 'your_client_secret',
},
cache: {
cacheLocation: 'memory',
storeAuthStateInCookie: true,
forceRefresh: false,
},
};
const SCOPES = [];
const cca = new msal.ConfidentialClientApplication(config);
const keyList = JSON.parse(process.env.COOKIE_KEYS);
const keys = new KeyGrip(keyList);
app.keys = keys;
app.use(session(app));
app.use(async (ctx, next) => {
ctx.session.redirectUri = `http://${ctx.header.host}/auth/openid/callback`;
await next();
});
app.use(async (ctx, next) => {
if (ctx.session.state) {
if (ctx.query.state !== ctx.session.state) {
ctx.redirect('/auth/error');
}
} else {
ctx.session.state = Math.random().toString(36).slice(-10);
}
await next();
});
app.use(async (ctx) => {
const urlParams = new URLSearchParams(ctx.request.querystring);
const code = urlParams.get('code');
const state = urlParams.get('state');
const tokenRequest = {
code,
redirectUri: ctx.session.redirectUri,
scopes: SCOPES,
};
try {
const tokenResponse = await cca.acquireTokenByCode(tokenRequest);
ctx.session.accessToken = tokenResponse.accessToken;
ctx.redirect('/');
} catch (error) {
ctx.redirect(`/auth/error?error=${error}`);
}
});
app.listen(3000, () => {
console.log('Server listening on port 3000!');
});上面代码中首先,我们引入了 msal 库并且设置了 Azure AD 的配置信息。然后,我们启动了一个 Koa2 服务器并且为它设置了 session。我们为 URL 中传递的查询字符串(query params)设置了一个会话 (session),并且构建了一个加密密钥(keygrip)。
我们还为 RESTful 路由提供了一个处理 AWS API 网关(API Gateway)请求的中间件。在这个中间件中,我们从请求中拿到了授权代码和状态,并使用代码向 Azure AD 请求用户令牌。如果用户成功验证并获得了令牌,我们将使用session将用户的访问令牌保持在服务端的会话中,并重定向到主应用程序(此处假设是)。
然后你就可以通过访问路由来进行身份验证,比如:
http://localhost:3000/auth/openid?tenant_id=your_tenant_id&client_id=your_client_id
4. 结束语
在本文中,我们学习了如何在 Koa2 中使用 Azure AD 进行用户认证。我们看到,通过配置好 Azure AD 应用程序并运行一些 Node.js 代码,就可以让你的 Koa2 Web 应用程序变得可靠,灵活和安全。随着 Azure AD 这个身份认证解决方案的不断发展,在云和企业环境中使用它越来越流行,希望这篇文章能为您的 Web 应用程序的开发提供帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ce6c3de46428fe9e8a2ee5