NodeJS 使用Azure AD和MSAL通过REST API使用电子邮件密码登录用户

9o685dep  于 5个月前  发布在  Node.js
关注(0)|答案(1)|浏览(85)

我有一个场景,我有一个react本机应用程序和一个nodejs服务器。我需要使用Azure AD对用户进行身份验证。我首先想到使用Clerk,Appwrite,Supplement,Firebase等身份验证提供程序进行社交身份验证,但决定改为这样做:用户输入他们的电子邮件和密码,它将被发送到后端nodejs API。然后这个API将使用MSAL(或者更好的东西,如果我们有它),并根据大学的Azure AD对该用户进行身份验证,然后将令牌发送回RN应用程序。当RN应用程序命中/getStudentData端点时,它将验证令牌并从数据库中获取学生的数据。
我找不到我正在寻找的确切文档或教程。有人有类似的经验吗?我需要用MSAL保护我的API路由,但也有能力用电子邮件和pwd登录用户。这是一个好的架构吗?对我有任何建议吗?谢谢。

r3i60tvu

r3i60tvu1#

注意:如果您想使用邮箱和密码登录或认证用户,可以使用**acquireTokenByUsernamePassword**方式。

  • 但出于安全原因,Microsoft不推荐使用**acquireTokenByUsernamePassword**。
  • ROPC流中不支持个人帐户或启用MFA的用户帐户。
  • 因此,您也可以使用**acquireTokenByCode()**方法对用户进行身份验证。

创建Azure AD应用程序并根据您的要求授予API权限


的数据
通过Postman使用以下参数生成访问令牌

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

grant_type:password
scope:api://xxx/test.read
username:[email protected]
password:***
client_id:ClientID

字符串


  • 要在msal-node中执行相同操作,请使用以下代码:*
const msal = require("@azure/msal-node");

const msalConfig = {
    auth: {
        clientId: "ClientID",
        authority: "Authority",
    }
};

const pca = new msal.PublicClientApplication(msalConfig);
const usernamePasswordRequest = {
    scopes: ["scope"],
    username: "username", 
    password: "***",
};

pca.acquireTokenByUsernamePassword(usernamePasswordRequest).then((response) => {
    console.log("acquired token by password grant");
}).catch((error) => {
    console.log(error);
});

否则通过引用此MsDoc来使用**acquireTokenByCode()**。

相关问题