首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MSAL.js和Azure Active在SPAs中保护REST调用--如何将身份验证令牌传递给承载策略

使用MSAL.js和Azure Active在SPAs中保护REST调用--如何将身份验证令牌传递给承载策略
EN

Stack Overflow用户
提问于 2021-01-30 17:48:31
回答 1查看 1.9K关注 0票数 2

我正在创建一个SPA使用React和Express。我正在尝试包括使用MSAL.js的身份验证,并查看了微软SPA教程。我已经能够使用@msal-react来实现这一功能。虽然这确实会执行身份验证,但它不会保护REST免受未经身份验证的用户的访问。

我发现Active Directory Javascript Nodejs Web API似乎提供了一种使用Passport和seem策略来保护REST的方法,但是显示如何将其与客户端结合起来的链接似乎被打破了。

我不知道如何将客户端上的身份验证与REST连接起来。据我所知,必须传递身份验证令牌,但我不知道如何传递。

服务器端示例代码有:

代码语言:javascript
复制
// API endpoint exposed
app.get("/api",
    passport.authenticate('oauth-bearer', {session: false}),
    (req, res) => {
        console.log('Validated claims: ', req.authInfo);

        // Service relies on the name claim.  
        res.status(200).json({
            'name': req.authInfo['name'],
            'issued-by': req.authInfo['iss'],
            'issued-for': req.authInfo['aud'],
            'scope': req.authInfo['scp']
        });
    }
);

我在客户端试图做的是获取帐户信息:

代码语言:javascript
复制
import {
  useAccount,
  useMsal
} from "@azure/msal-react";

...

const { accounts } = useMsal();
const account = useAccount(accounts[0] || {});

从认证后的account来看,我认为account.idTokenClaims可能有必要的东西,但没有运气。

我被困住了,因为我不确定我是否对Bearer策略的工作方式有根本的误解,我是否不正确地使用MSAL或Passport (或两者),或者这是否是一个配置问题。我很感激你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-01 22:12:59

在调用受保护的REST时,需要显示客户机应用程序(代表已登录用户)获得的访问令牌。所以ID令牌在这里是做不到的-它只用于您的客户端应用程序,作为用户身份验证成功的证明。(理想情况下,客户端应用程序和服务应用程序应该是分开的,每个应用程序都以Azure广告应用程序注册为代表)。

身份验证之后,需要使用acquireToken*方法之一获得访问令牌。将令牌请求对象传递给该方法。在这里,您需要指定请求访问令牌的资源和权限。用于调用REST的访问令牌不应该/不适用于其他API。

您所链接的教程文章指向使用隐式流的示例。我建议使用更安全的/auth代码流

本教程应该满足您的需要。请特别检查本节

附注:有关React客户端应用程序,请参见

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65971268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档