【问题标题】:Ruby & IMAP - Accessing Office 365 with Oauth 2.0Ruby 和 IMAP - 使用 Oauth 2.0 访问 Office 365
【发布时间】:2023-01-24 17:21:42
【问题描述】:

众所周知,MS 禁用了 IMAP 进行基本身份验证。

我想弄清楚如何使用 ruby​​(不是 ruby​​ on rails)让 OAUTH 2.0 工作。 我有 Azure APP 和所需的一切(我认为),但我找不到任何与 ruby​​ 和获取访问令牌相关的代码。

第一步已完成,但下一步是获取访问令牌。 https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth

我需要读取不同的 Outlook 邮箱。

有人可以解释一下如何做到这一点吗?

【问题讨论】:

  • 你能展示一些上下文代码吗?
  • @tadman 请参阅下面的答案

标签: ruby oauth-2.0 outlook imap


【解决方案1】:

解决方案对我来说!

我采取的步骤。

  1. 制作了一个 Azure 应用程序(“Device Flow”对我来说是最简单的方法)检查​​链接中的步骤。如果您想使用 IMAP,您还需要更改您的 APP 中的一些设置。在 2:50 - 4:30 之间查看 youtube 链接here
  2. 从此链接获取邮递员请求(向下滚动一点)(click here)
  3. 从邮递员您可以使用“Device Flow”请求。
  4. Device Authorization Request开始(为此你需要一个范围和client_id)我使用了https://outlook.office.com/IMAP.AccessAsUser.All范围。
  5. 转到您从请求中返回的链接并输入所需的代码。
  6. 现在转到Device Access Token Request 并使用上次请求中的“device_code”并将其放在code 下,在body 下。
  7. 你应该得到一个access_token

    使用红宝石连接

    require 'gmail_xoauth' # MUST HAVE! otherwise XOAUTH2 auth wont work
    require 'net/imap'
        imap = Net::IMAP.new(HOST, PORT, true)
        access_token = "XXXXX"
        user_name = "email@outlook.com"
        p imap.authenticate('XOAUTH2',"#{user_name}", "#{access_token}")
    
        # example
        imap.list('','*').each do |folders|
          p folders
        end
    

    XOAUTH2 返回

    #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", data=#<struct Net::IMAP::ResponseText code=nil, text="AUTHENTICATE completed.">, raw_data="RUBY0001 OK AUTHENTICATE completed.
    
    

    只是为了指定

    HOST = 'outlook.office365.com'
    PORT = 993
    

【讨论】:

  • 您如何管理令牌刷新?此外,令牌端点不会将 refresh_token 返回给我,我是否错过了设置?谢谢
猜你喜欢
  • 2018-08-30
  • 2012-02-26
  • 2021-03-23
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多