userjack6880 / Open-Report-Parser

A Perl based tool to parse DMARC reports from an IMAP mailbox or from the filesystem, and insert the information into a database. Derived from Techsneeze's dmarcts-report-parser
GNU General Public License v3.0
32 stars 7 forks source link

[Question]: Oauth2 Support for IMAP #20

Open Firat-Gulec opened 7 months ago

Firat-Gulec commented 7 months ago

Hi I tried to use m365 modern Auth but it didn't connect I use this command -i and -d flag and I created azure app registration for imap. also I used auth2 uri and client ID and my debug info is below

Can you help me? I think it will help with all questions.

--- DEBUG ---
  Open Report Parser
  Version 0 Alpha 5
-------------
Open Report Parser DEBUG ENABLED
-- Script Options --

Report Source:   0
(0: IMAP, 1: Message, 2: XML, 3: MBOX, 4: ZIP, 5: JSON)
Show Processed:   0
Delete Reports:   0
Delete Failed:    0
Replace Reports:  0
DMARC Only:       1
(0: DMARC\TLS, 1: DMARC Only, -1: TLS Only)

-- Database Options --

DB Type:          mysql
DB Name:          dmarc
DB User:          dmarc
DB Host/Port:     localhost:3306
DB TX Support:    1

Max XML Size:     500000
Max JSON Size:    500000
Compress XML:     0
Compress JSON:    0

-- IMAP Options --

IMAP Server:      ps.outlook.com
IMAP Port:        143
TLS:              1
SSL:              0
TLS Verify:       1
IMAP User:        dmarc@xxxxxxxx.xx
IMAP Ignore Err:  0
IMAP Auth:        oauth2
Oauth2 URI:       xxxxxxxxxxxxxxxxxxxxx
OAuth2 Client ID: xxxxxxxxxxxxxxxxxxxxx
DMARC Folders:
   Reports:       Inbox
   Processed:     Inbox.Processed
TLS Folders:
   Reports:       tls
   Processed:     tls.Processed
----

--- DEBUG ---
  use tls with verify servercert.
-------------

--- DEBUG ---
  connection to ps.outlook.com with Ssl => 0, User => dmarc@xxxxxxx.xx, Ignoresizeerrors => 0
-------------
Started at Tue Nov 21 15:59:21 2023
Using Mail::IMAPClient version 3.42 on perl 5.032001
Connecting with IO::Socket::IP PeerAddr ps.outlook.com PeerPort 143 Proto tcp Timeout 600 Debug 1 SSL_verify_mode 1
Connected to ps.outlook.com
Read:   * OK The Microsoft Exchange IMAP4 service is ready. [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==]
Sending: 1 STARTTLS
Sent 12 bytes
Read:   1 OK Begin TLS negotiation now.

--- DEBUG ---
  using oauth2
-------------
no token found, requesting
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at lib/OAuth.pm line 172.

Originally posted by @Firat-Gulec in https://github.com/userjack6880/Open-Report-Parser/issues/9#issuecomment-1821099661

bscharff commented 7 months ago

For $oauthuri, it should be similar to https://login.microsoftonline.com/{TENANT ID}/oauth2/v2.0/ You can get this from the Endpoints button in Azure App Registrations, except they give you the URL with /token or /authorize at the end - remove that and it should work.

One other thing, in /lib/OAuth.pm, I had to update line 158 to: $scope .= "%20offline_access%20https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All";