在 auth0 中获取 accessToken

Posted

技术标签:

【中文标题】在 auth0 中获取 accessToken【英文标题】:Get accessToken in auth0 【发布时间】:2021-05-30 07:27:00 【问题描述】:

我正在使用 auth0nextJS

我接下来要做的是:当用户添加他的凭据并登录时,他将被重定向到callback API。

这里

    import auth0 from '../../utils/auth0';

    export default async function callback(req, res) 
      try 
        await auth0.handleCallback(req, res, 
          redirectTo: '/'
        );
       catch (error) 
        console.error(error);
        res.status(error.status || 400).end(error.message);
      
    

我想根据令牌重定向用户。 如果应用程序是简单的用户或管理员,我会解码令牌。

如果他是管理员,如果不是用户页面,他应该被重定向到管理页面。

所以我做了这样的事情:

    import auth0 from '../../utils/auth0';

    export default async function callback(req, res) 
       const tokenCache = auth0.tokenCache(req, res);
       const  accessToken  = await tokenCache.getAccessToken();
       console.log(accessToken) 
      try 
        await auth0.handleCallback(req, res,  redirectTo: '/' );
       catch (error) 
        console.error(error);
        res.status(error.status || 400).end(error.message);
      
    

所以我想在这个函数中获取令牌,以便能够在不同页面上重定向用户,但是如果我想在这里获取令牌,我会遇到问题:

用户没有有效的会话。

如果我删除与用户被重定向的令牌相关的代码,但我需要在此处获取令牌才能对用户进行检查。

如何在callback 函数中获取令牌并实现我上面描述的内容?

【问题讨论】:

您是否检查过 NextJS GitHub 存储库中的 auth0 示例? github.com/vercel/next.js/tree/canary/examples/auth0 【参考方案1】:

使用nextjs-auth0库的v1.2.0,您可以在callback handler期间访问身份令牌。

import  handleAuth, handleLogin, handleCallback  from '@auth0/nextjs-auth0';

const afterCallback = (req, res, session, state) => 
    console.log(session.idToken);
    if (!session.user.isAdmin) 
        throw new UnauthorizedError('User is not admin');
    
    return session;


export default handleAuth(
    async callback(req, res) 
        try 
            await handleCallback(req, res,  afterCallback );
         catch (error) 
            res.status(error.status || 500).end(error.message);
        
    
);

但是,请记住,您通常应该由客户端应用程序avoid looking inside the access token。如果你需要将用户信息传递给客户端,你应该将它放在一个 id_token 中。访问令牌供 API 使用,您的客户端应用程序不应对其内容格式或语义有任何依赖,因为访问令牌的设计没有定义格式。

【讨论】:

以上是关于在 auth0 中获取 accessToken的主要内容,如果未能解决你的问题,请参考以下文章

如何在附加 API 服务 Auth0 中获取访问令牌?

如何在使用 auth0 进行身份验证的反应应用程序中获取用户信息

如何在 getServerSideProps 中获取 Auth0 用户对象?

Auth0 Laravel 获取 JWT 令牌

在 Android 的 Auth0 Lock 中获取 403 不允许的用户代理

@auth0/angular-jwt : 从解码的令牌中获取声明