You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby on Rails中用预存access_token初始化microsoft_graph gem客户端?

如何使用预存的Access Token初始化Microsoft Graph Ruby客户端

在Ruby on Rails项目中使用microsoft_graph gem调用Microsoft Graph接口时,我已经通过现有OAuth流程获取并存储了用户的离线access_token,但官方文档仅提供了基于客户端凭证的客户端初始化方式,没有说明如何直接传入已有的access_token。

官方给出的初始化代码示例:

context = MicrosoftKiotaAuthenticationOAuth::ClientCredentialContext.new("<租户ID>", "<客户端ID>", "<客户端密钥>")

authentication_provider = MicrosoftGraphCore::Authentication::OAuthAuthenticationProvider.new(context, nil, ["Files.Read"])

adapter = MicrosoftGraph::GraphRequestAdapter.new(authentication_provider)
client = MicrosoftGraph::GraphServiceClient.new(adapter)

我期望实现的逻辑是直接用预存的access_token初始化客户端,类似这样:

my_access_token = 'xxxx' 
client = MicrosoftGraph::GraphServiceClient.new(....) # 使用我的access_token完成认证

client.me.select(....)

解决方案

你可以通过自定义认证上下文类来实现这一需求,该类只需实现get_access_token方法,返回预存的access_token即可:

# 自定义认证上下文,返回预存的access_token
class PreStoredTokenContext
  def initialize(access_token)
    @access_token = access_token
  end

  def get_access_token(_scopes = nil, _options = nil)
    # 返回符合gem要求的token结构,expires_on可设置为实际过期时间
    OpenStruct.new(access_token: @access_token, expires_on: Time.now + 3600)
  end
end

# 初始化客户端
my_access_token = 'xxxx'
token_context = PreStoredTokenContext.new(my_access_token)

authentication_provider = MicrosoftGraphCore::Authentication::OAuthAuthenticationProvider.new(token_context, nil, [])
adapter = MicrosoftGraph::GraphRequestAdapter.new(authentication_provider)
client = MicrosoftGraph::GraphServiceClient.new(adapter)

# 调用示例
client.me.select(['displayName', 'mail']).get

说明:自定义的PreStoredTokenContext类模拟了官方上下文类的核心方法,返回gem认证流程所需的token结构。如果你的access_token有明确的过期时间,建议将expires_on设置为实际的过期时间戳,而非示例中的模拟值。

内容的提问来源于stack exchange,提问作者Sebastiano Barravecchia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:30:11