Office365 OAuth2 共有メールボックスのユーザーでの設定について

コメント

12件のコメント

  • 正式なコメント
    服部健太

    Kompira側では、特に共有メールボックスのアカウントの対応は行っておりません。

    共有メールぼっくにアクセス権限を持つ別のユーザーアカウントを用いることで、そのユーザーで認証して、共有メールボックスにアクセスできるかと思いますが、弊社内では未検証です。

    コメントアクション パーマリンク
  • ueyama

    ご回答ありがとうございます。

    共有メールボックスのアカウントは未検証の旨、承知しました。

     

    ちなみに、下記ドキュメントを参考にしているのですが、

    https://docbase.io/posts/2513028/sharing/4af461ba-3338-461e-adb4-611f7c482c70

    3.2. KE上にOAuth2プロバイダ型オブジェクトを作成する
    3.3.3. 承認フローを開始する

    ウィンドウがポップアップするので、ログインしてから、メールアクセスの許可を行ってください。
    ユーザーが承認を行うと、Komipraはトークンエンドポイ>ントにアクセスしてトークンを取得します。

    共有メールボックスでなく通常のメールアカウントでの登録の場合は、このポップアップされたウインドウ内で、アクセス許可の処理(承諾ボタン?を押す)を実施することで、トークンが発行されるイメージでしょうか?(当該メールアカウントのユーザーの権限で承認する)

    ここのポップアップで「管理者への承認が必要です」と表示され、承認要求ボタンしかなく、一応そちら押して次に進めてみたのですが、リダイレクト失敗の画面に遷移します。
    元々のリダイレクト設定がlocalhostだったため、一応リダイレクト後のポップアップウィンドウのアドレスバーに表示されているURLをダイアログに貼り付けて提出したのですが、トークンの取得に失敗しましたと表示されます(この時点で承認要求の段階でアプリの承諾がされてないからかと思いますが)

    リダイレクト失敗時の場合のURLの貼り付けは、このポップアップウインドウ内で承認(ユーザーによる承認)されることが前提でしょうか?
    管理者での承認が必要な場合でlocalhostでリダイレクト失敗したとき、365の管理者側での承認許可を実施した後に、リダイレクトURLを提出すればトークン取得はできるものでしょうか?

    参考)一応、下記のKEのアプリ登録(APIアクセス設定)のところで、画像イメージと同じように下記4つのアクセス許可の「管理者の同意」を「いいえ」に設定しているのですが、
    上記の承認フローのところで、このアプリには管理者への承認が必要と要求されています。

    3.1. OAuth2プロバイダに KE を登録する
    3.1.1. Office365 の場合
    (3) API のアクセス許可設定を行う

    ・IMAP.AccessAsUser.All
    ・POP.AccessAsUser.All
    ・SMTP.Send
    ・offline_access

    0
    コメントアクション パーマリンク
  • 服部健太

    Kompira の既知の問題で、「Office365で一般ユーザーによる同意を制限している環境で、ユーザーがOAuth2の承認フローを開始しても、アクセストークンの取得に失敗する。」というのがございます。

    おそらくこの問題にぶつかっているものと思います。

    将来的なバージョンでは解消を目指しますが、現時点では回避策として、以下の手順でリダイレクトURLを取得して、「承認フローを開始」を押して表示されるリダイレクトURL入力のダイアログに張り付けていただけますでしょうか?

    (1) KompiraにSSHログインし、root権限で以下のコマンドを実行する。

    # /opt/kompira/bin/manage.py shell -c 'from kompira.models.extends import get_object; print(get_object("<Office365 メールチャネル型オブジェクトのパス>").get_auth_url(None))' 2> /dev/null

    (2) 出力される承認フローURLの一部をコピー

    以下のようなURLが出力されるので、そのうち最後の '&prompt=consent' の部分を取り除いた部分をコピーしてください。

    https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id=7b1a7d52-54b5-4e66-993c-c8f5b6200f8d&redirect_uri=https%3A%2F%2Flocalhost&scope=https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All+https%3A%2F%2Foutlook.office.com%2FPOP.AccessAsUser.All+https%3A%2F%2Foutlook.office.com%2FSMTP.Send+offline_access&state=%257B%2522scheme%2522%253A%2520%2522https%2522%252C%2520%2522netloc%2522%253A%2520%2522localhost%2522%252C%2520%2522path%2522%253A...

    (3) 別途ブラウザから、(2)でコピーしたURLを入力

    承認フローが開始されて進めて行くと、最終的に「このサイトにアクセスできません」とブラウザに表示されるので、

    その時点でのブラウザに表示されているURLをコピー(リダイレクトURL)

    (4) (3) でコピーしたリダイレクトURLを、「承認フローを開始」を押して表示されるリダイレクトURL入力にダイアログにペーストして、提出ボタンを押す。

    (このとき小さいブラウザ画面が別に開いて承認フローが開始しますが、こちらのブラウザ画面は無視してください(リダイレクトURLを提出すると消えます))

    (5) アクセストークンが取得できていることを確認する。

    ---

    以上、よろしくお願いいたします。

    0
    コメントアクション パーマリンク
  • ueyama

    対処手順ご教示いただき誠にありがとうございます。

    時間空いてしまいましたが、共有メールボックスのアカウントでなく、通常のユーザアカウント発行できたので、そちらで試してみました。

    【環境前提】

    • 承認フロー押下後ウインドウでMicrosoft365のユーザーでログイン、承認要求までできる
    • Azure Portal上にて上記要求に対する管理者の承認を実施済み
    • メールアドレスのドメインは独自ドメイン
    • 「OAuth2プロバイダに KE を登録する」のリダイレクトURIは、KompiraサーバがDNS登録されていないので、https://localhostで作成している

    【実施結果】

    (3) 別途ブラウザから、(2)でコピーしたURLを入力

    承認フローが開始されて進めて行くと、

    上記(2)の'&prompt=consent' の部分を取り除いたURLを貼り付けると、承認フローの画面が表示されず、最初から「このサイトにアクセスできません」と表示されます。(「上記の承認フローが開始されて・・・」と異なる状態となります)

    そこで表示されているURL(https://localhost/?code=......................の形式です)を(4)で貼り付けたところ、下記エラーとなります。

    OAuth2トークンの取得に失敗: HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max retries exceeded with url: /<エンドポイントの文字列>/oauth2/v2.0/token (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f8b431be1f0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

    エラーメッセージがName or service not knownとなっていたので、DNSまわりやプロキシまわり確認いたしましたが、原因が特定できず。

    何か対処法ご教示いただければ幸いです。

    /etc/sysconfig/kompirad、/etc/sysconfig/kompira_jobmngrdにプロキシ設定し、KE上からインターネット上のアドレス(kompira cloudのURL)へのリクエストし、正常にレスポンスは返ってくる状態ではあります。

     

    ちなみに、(2)で'&prompt=consent' の部分を取り除かなく、そのまま(3)で貼り付けで試したところ、

    承認要求の画面に遷移します。承認要求押下→アプリに戻る押下→「このサイトにアクセスできません」と表示されます

    そのときのURL形式は(https://localhost/?error=......................の形式)です。

    そのURLを(4)で提出すると、下記エラーとなります。

    OAuth2トークンの取得に失敗: (access_denied) AADSTS65004: User declined to consent to access the app.

    また、(2)で出力される承認フローURLについては、/common/部分が認証エンドポイントに含まれる文字列になる以外、ほぼ例に挙げあげられているURLと同じ形式です。

     

     

    0
    コメントアクション パーマリンク
  • 服部健太

    上記(2)の'&prompt=consent' の部分を取り除いたURLを貼り付けると、承認フローの画面が表示されず、最初から「このサイトにアクセスできません」と表示されます。(「上記の承認フローが開始されて・・・」と異なる状態となります)

    これは、ブラウザ側にMS365のログインセッションが残っていたのと、すでに管理者によって承認実施されていたため、承認フローがリダイレクトまでスキップされたからだと推測いたします。

    そこで表示されているURL(https://localhost/?code=......................の形式です)を(4)で貼り付けたところ、下記エラーとなります。

    OAuth2トークンの取得に失敗: HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max retries exceeded with url: /<エンドポイントの文字列>/oauth2/v2.0/token (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f8b431be1f0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

    エラーメッセージがName or service not knownとなっていたので、DNSまわりやプロキシまわり確認いたしましたが、原因が特定できず。

    その後、KompiraはリダイレクトURLの文字列から必要な情報を抽出して、MS365の token エンドポイントにアクセスして、トークンを取得しに行きますが、Kompira から エンドポイント(login.microsoftonline.com) への接続に失敗しているため、トークン取得に失敗しているものと考えられます。

    Kompiraサーバから、当該エンドポイントへの https 接続ができるかどうか、ご確認いただけますでしょうか?

    0
    コメントアクション パーマリンク
  • ueyama

    Kompiraサーバから、当該エンドポイントへの https 接続ができるかどうか、ご確認いただけますでしょうか?

    以下ジョブフロー実行したところ、どちらも200で応答返ってきます。ただし、以下のとおりコンソールにInsecureRequestWarningのメッセージが表示されます。

    [url = "https://login.microsoftonline.com"] ->
    urlopen(url)=>
    [result = $RESULT] ->
    print(result.code) ->

    [url = "<OAuth2プロバイダの認証ポイントのURL>"] ->
    urlopen(url)=>
    [result = $RESULT] ->
    print(result.code)

     

    実行結果

    /opt/kompira/lib64/python3.8/site-packages/urllib3/connectionpool.py:1061: InsecureRequestWarning: Unverified HTTPS request is being made to host '</etc/sysconfig/kompiradで設定したプロキシのIPアドレス>'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
      warnings.warn(
    /opt/kompira/lib64/python3.8/site-packages/urllib3/connectionpool.py:1061: InsecureRequestWarning: Unverified HTTPS request is being made to host '</etc/sysconfig/kompiradで設定したプロキシのIPアドレス>'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
      warnings.warn(
    /opt/kompira/lib64/python3.8/site-packages/urllib3/connectionpool.py:1061: InsecureRequestWarning: Unverified HTTPS request is being made to host '</etc/sysconfig/kompiradで設定したプロキシのIPアドレス>'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
      warnings.warn(
    200
    200
    0
    コメントアクション パーマリンク
  • 服部健太

    承認フローの処理は、httpd サーバの実行コンテクストで処理されるため、httpdのプロキシ設定が必要になるのですが、

    /etc/sysconfig/httpd

    にプロキシの設定はされてますでしょうか?

    0
    コメントアクション パーマリンク
  • ueyama

    承認フローの処理は、httpd サーバの実行コンテクストで処理されるため、httpdのプロキシ設定が必要になるのですが、

    /etc/sysconfig/httpdにプロキシの設定はされてますでしょうか?

    上記設定していなかったため、kompiradと同じプロキシ設定したところ、上記(1)~(5)の手順で無事トークンの保存ができました。

    ただ、接続テストがうまくいかず、以下エラーとなります。

    [Errno -2] Name or service not known

    この接続テスト実行の際のプロキシも、上記httpdファイル見ていますでしょうか?

    チャネル設定は以下のとおりで、同じようにkompira(ジョブフロー)からoutlook.office365.comへは、問題なく接続できる状態です。

    serverName: outlook.office365.com
    protocol: IMAP4
    SSL: True
    port: None

     

     

    0
    コメントアクション パーマリンク
  • 服部健太

    接続テストの処理も httpd のコンテクストで実行されるため、/etc/sysconfig/httpd のプロキシ設定が反映されます。

    IMAP/SSL での接続になりますので、デフォルトではポート 993 に接続しに行きますが、こちらはプロキシ経由で接続できますでしょうか?

     

    0
    コメントアクション パーマリンク
  • ueyama

    接続テストの処理も httpd のコンテクストで実行されるため、/etc/sysconfig/httpd のプロキシ設定が反映されます。IMAP/SSL での接続になりますので、デフォルトではポート 993 に接続しに行きますが、こちらはプロキシ経由で接続できますでしょうか?

    返答遅くなりましてすみません。

    こちらのネットワーク環境起因の問題かと調査しているのですが、以下点を確認させてください。
    (Name or service not knownはDNS設定見直しで解消、現在はTimeoutでエラーとなる状態です)

    ・IMAP/SSL での接続とのことですが、Kompiraサーバからの外部通信は許可すればよい理解であってますでしょうか?
     Kompiraサーバ → IMAP(Port:993) → outlook.office365.com

    ・/etc/sysconfig/httpd に記載した http_proxy、https_proxy等のプロキシに設定したホスト経由では上記通信されない理解であってますでしょうか?(承認フロー(トークン取得)はhttp通信なのでここのプロキシ経由での通信となるが、上記はIMAP通信のため)
     IMAP通信でプロキシ使用する場合は、別の設定になりますでしょうか?

    0
    コメントアクション パーマリンク
  • 服部健太

    確認してみましたところ、Kompira側では、IMAP/POP でのメールサーバ接続はプロキシに対応しておりませんでした。

    したがって、outlook.office365.com にKompiraサーバから直接IMAP/POP で接続できるように、ネットワーク環境を許可する必要があるかもしれません。

    0
    コメントアクション パーマリンク
  • ueyama

    確認してみましたところ、Kompira側では、IMAP/POP でのメールサーバ接続はプロキシに対応しておりませんでした。

    したがって、outlook.office365.com にKompiraサーバから直接IMAP/POP で接続できるように、ネットワーク環境を許可する必要があるかもしれません。

    ご回答ありがとうございます。上記仕様承知しました。

    直接通信できる形で調整いたします。

    0
    コメントアクション パーマリンク

サインインしてコメントを残してください。