如何在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
相关产品推荐
相关产品推荐

