当前位置: 首页 > 知识库问答 >
问题:

Microsoft Graph API令牌在3600秒后过期- NodeJS

徐学潞
2023-03-14

我正在使用微软图形应用编程接口生成oAuth 2.0访问令牌,该令牌在1小时后过期。使用的路由是:https://login.microsoftonline.com/[租户ID]/oauth 2/v2.0/令牌我正在查询字符串中传递这些值。{grant_type:"client_credentials",client_id:APP_ID,client_secret:APP_PASSWORD,范围:"https://graph.microsoft.com/.default",}

现在,我的当前实现添加了递归,在调用图形api从AD中提取用户详细信息之前,我添加了重试。

有什么方法可以获取刷新令牌,因为刷新令牌持续时间更长?

共有2个答案

蓝华皓
2023-03-14

在我看来,将刷新令牌与客户端相关流一起使用是没有用的。当您可以直接获得访问令牌时,为什么要添加额外的步骤来获得访问令牌。

使用client_credentials授予类型的流:

步骤1:客户端身份验证

已颁发OK访问令牌

获得Refresh_token的流程

步骤1:客户端身份验证

步骤 2:刷新令牌验证并使用它来获取访问令牌

已颁发OK访问令牌。

夏景胜
2023-03-14

您需要按照以下步骤启用刷新令牌:

>

  • 请求作用域“offline_access”。这将告诉endpoint提供refresh_token以及access_token和相关元数据

    您需要请求一个新的access_token(和refresh_token),方法是重复相同的POST到/common/oauth2/v2.0/token,但主体略有不同-grant_type设置为refresh_token,而不是代码,您提供一个refresh-token属性和值

    例如:。

    POST /{tenant}/oauth2/v2.0/token
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=[client Id]
    &scope=[scope]
    &refresh_token=[refresh token]
    &grant_type=refresh_token
    &client_secret=[secret]
    

    有关刷新令牌请求的详细信息,请参阅此处的文档。

  •  类似资料:
    • 我是谷歌应用程序管理员,使用xoauth.py和IMAP下载用户邮件,没有用户密码。但这个过程在1小时后停止。我搜索了很多博客,我知道这个令牌在1小时后到期。谁能告诉我如何将过期时间延长到永远,或者如何刷新此令牌?

    • 几天前,我创建了一个Kubernetes集群,有一个主节点和一个工作节点。现在我想向集群添加另一个节点,但是主服务器上原来的“kubeadm init”打印的令牌已经过期(默认情况下是24小时后)。 “kubeadm join” 命令有一个 “--discovery-file”。它需要一个配置文件,我已经尝试了我在这里找到的格式: https://github.com/kubernetes/kub

    • 当然,如果我们对每个请求进行一次到DB的往返,那么我们就可以验证帐户是有效的还是无效的。我的问题是,什么是最好的方法来照顾这种情况的长寿命代币。 提前道谢。

    • 我正在使用NodeJS访问Azure ServiceBus,它工作了好几天。突然,我开始收到错误 订阅删除错误:错误:401-ExpiredToken:。跟踪ID:xxxxxx-xxxxxxx,时间戳:2015年4月8日12:32:54 PM 我正在使用连接字符串连接到ServiceBus 只有一个共享访问策略“RootManageSharedAccessKey”具有“管理、发送、监听”的权限 这

    • 我正在使用keycloak 3.4.3 Server和3.4.3 springboot适配器。登录是使用以下json配置使用JavaAdapter完成的: 使用非ajax调用刷新令牌,但当请求包含标题X-request-with:XMLHttpRequest时,令牌不会刷新。我的配置是否有问题,或者这是正常行为,我需要在ajax调用之前使用JS适配器刷新令牌?

    • 我用ReactJS做单页网页登录。问题是如何以及在哪里保存令牌过期时间。我需要保存在sessionStore中,但当浏览器关闭时,所有的数据都将被删除。本地商店?但数据将永远。或者我可以在localStore中保存并在每个事件中添加函数,该函数检查localStore的过期时间,当事件触发成功时再次更新localStore?但代码看起来很可怕...性能问题呢?这大概可以接受吗?