Hi:

I recently found the fantastic module Azure::AD::Auth. I'm trying to authenticate using oauth to Exchange 365 using an azure AD account and the oauth protocol.

Do you know anyone who has done this? Have they succeeded?

Here's what i've done:

pjs11@R5124614 email_filter $ more ./azure_ad_creds_test.pl #!/usr/bin/env perl use strict; use Azure::AD::ClientCredentialsV2; our $app_id = '**** MY APP ID ****'; our $secrets_id = '**** MY SECRET ID ****'; our $secrets_value = '**** MY SECRET VALUE ****'; our $tenant = '**** MY TENANT ID ****'; my $creds = Azure::AD::ClientCredentialsV2->new( resource_id => 'https://graph.windows.net/', client_id => $app_id, secret_id => $secrets_value, tenant_id => $tenant, scope => '.default', ); print $creds->access_token . "\n";

==== Got a token back using the above code! Wh00t! ====

pjs11@R5124614 email_filter $ ./azure_ad_creds_test.pl eyJ0eXAiOiJKV1QiLCJub25jZSI6IllNbHktdGJaczlCWmZGYW1HNWJNN2VubGNlVmNwSD +VuVkhIWmFXQ19yTlEiLCJhbGciOiJSUzI1NiIsIng1dCI6IjJaUXBKM1VwYmpBWVhZR2F +YRUpsOGxWMFRPSSIsImtpZCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSJ9.eyJ +hdWQiOiIwMDAwMDAwMy0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJo +dHRwczovL3N0cy53aW5kb3dzLm5ldC9hMjVmZmY5Yy0zZjYzLTRmYjItOWE4YS1kOWJkZ +DAzMjFmOWEvIiwiaWF0IjoxNjYzNjEyMDA0LCJuYmYiOjE2NjM2MTIwMDQsImV4cCI6MT +Y2MzYxNTkwNCwiYWlvIjoiRTJaZ1lHRE04VERwK05yQ3VITWhqM0hLMDdvREFBPT0iLCJ +hcHBfZGlzcGxheW5hbWUiOiJNb25pdG9yaW5nIFNvbHV0aW9ucyIsImFwcGlkIjoiMjEz +NTczMmYtYzYzOS00N2RhLTlhOWYtZTk0NjRmNmRmZTJiIiwiYXBwaWRhY3IiOiIxIiwia +WRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvYTI1ZmZmOWMtM2Y2My00ZmIyLTlhOG +EtZDliZGQwMzIxZjlhLyIsImlkdHlwIjoiYXBwIiwib2lkIjoiZGYxNTY4MmYtNTZjZC0 +0MzA0LWFlYzgtYTRiMDMzZDIxZTM3IiwicmgiOiIwLkFSSUFuUDlmb21NX3NrLWFpdG05 +MERJZm1nTUFBQUFBQUFBQXdBQUFBQUFBQUFBU0FBQS4iLCJzdWIiOiJkZjE1NjgyZi01N +mNkLTQzMDQtYWVjOC1hNGIwMzNkMjFlMzciLCJ0ZW5hbnRfcmVnaW9uX3Njb3BlIjoiTk +EiLCJ0aWQiOiJhMjVmZmY5Yy0zZjYzLTRmYjItOWE4YS1kOWJkZDAzMjFmOWEiLCJ1dGk +iOiJ6UFE1ZHBPOUkwLTFPMVQ3cm1xSEFBIiwidmVyIjoiMS4wIiwid2lkcyI6WyIwOTk3 +YTFkMC0wZDFkLTRhY2ItYjQwOC1kNWNhNzMxMjFlOTAiXSwieG1zX3RjZHQiOjE0MTExN +DkzMDd9.Lto49B7rDNbGZdCgO9jR60Q9hjsU_oh9t6-IajRTQIhz44sq2Rmaim3oC2c9D +OLamLWtzy_EmTghZdV1hpALay1VPzj2zDNK3xlZgJ0DbRZnjEgGFI8UOAioXMjflRmaQa +iY5wbquTnNbuZtehcMek3aynHLusKdlxwlX_5dHf2WvpBDbD5u0eaVRdT8UiTEj08kW9D +19rcQBEXC0uGOoP4IrvrBlQHOdFOK_yr5AYJhdLC2Loc7t9_qCbzIFVk3BseumRprtPTg +2VPMXRx-ZX3tsCX5PMl4lDqeikNruh3dwuh70RSA7dgO71TUC_3pMib6aKViQmbtmzu0o +l0wBQ

==== ==== ^^^ Above demonstrates that I can get a token using Auth::AD::ClientCredentialsV2 ! ====

pjs11@R5124614 email_filter $ more ./imap_ad_clientcreds_test.pl #!/usr/bin/env perl use strict; use utf8; use URI::Escape; use MIME::Base64; use Mail::IMAPClient; use Azure::AD::ClientCredentialsV2; our $app_id = '**** MY APP ID ****'; our $secrets_id = '**** MY SECRET ID ****'; our $secrets_value = '**** MY SECRET VALUE ****'; our $tenant = '**** MY TENANT ID ****'; my $imapserver="outlook.office365.com"; my $username='tivolialertsdev@mayo.edu'; my $creds = Azure::AD::ClientCredentialsV2->new( resource_id => 'https://graph.windows.net/', client_id => $app_id, secret_id => $secrets_value, tenant_id => $tenant, scope => '.default', ); my $oauth_token = $creds->access_token; print "Received token: $oauth_token\n"; my $oauth_sign = encode_base64("user=". $username ."\x01auth=Bearer ". + $oauth_token ."\x01\x01", ''); # detail: https://developers.google.com/google-apps/gmail/xoauth2_prot +ocol print "Encoded: $oauth_sign\n"; my $imap = Mail::IMAPClient->new( Server => $imapserver, Port => 993, Ssl => 1, Uid => 1, IgnoreSizeErrors => 1, Debug => 1, ) or die('Can\'t connect to imap server.'); $imap->Showcredentials(1); # Massive debugging, please $imap->authenticate('XOAUTH2', sub { return $oauth_sign }) or die("Auth error: ". $imap->LastError);

==== ==== Trying test script above: ====

Received token: eyJ0eXAiOiJKV1QiLCJub25jZSI6ImMzNzlMS2NJdzdlLXpUWldFa2 +ZZRTgxbERUT0pQVGQ2OVljZnBlNUJQdnMiLCJhbGciOiJSUzI1NiIsIng1dCI6IjJaUXB +KM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSIsImtpZCI6IjJaUXBKM1VwYmpBWVhZR2FYRUps +OGxWMFRPSSJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAw +MDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9hMjVmZmY5Yy0zZjYzLTRmY +jItOWE4YS1kOWJkZDAzMjFmOWEvIiwiaWF0IjoxNjYzNjEyOTE5LCJuYmYiOjE2NjM2MT +I5MTksImV4cCI6MTY2MzYxNjgxOSwiYWlvIjoiRTJaZ1lHaTd2RTdrdXVUTzV1c1JaODV +WUzkyT0FBQT0iLCJhcHBfZGlzcGxheW5hbWUiOiJNb25pdG9yaW5nIFNvbHV0aW9ucyIs +ImFwcGlkIjoiMjEzNTczMmYtYzYzOS00N2RhLTlhOWYtZTk0NjRmNmRmZTJiIiwiYXBwa +WRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvYTI1ZmZmOWMtM2 +Y2My00ZmIyLTlhOGEtZDliZGQwMzIxZjlhLyIsImlkdHlwIjoiYXBwIiwib2lkIjoiZGY +xNTY4MmYtNTZjZC00MzA0LWFlYzgtYTRiMDMzZDIxZTM3IiwicmgiOiIwLkFSSUFuUDlm +b21NX3NrLWFpdG05MERJZm1nTUFBQUFBQUFBQXdBQUFBQUFBQUFBU0FBQS4iLCJzdWIiO +iJkZjE1NjgyZi01NmNkLTQzMDQtYWVjOC1hNGIwMzNkMjFlMzciLCJ0ZW5hbnRfcmVnaW +9uX3Njb3BlIjoiTkEiLCJ0aWQiOiJhMjVmZmY5Yy0zZjYzLTRmYjItOWE4YS1kOWJkZDA +zMjFmOWEiLCJ1dGkiOiJxS0xBemxKYmhVNmZSdFg1TXdOMUFBIiwidmVyIjoiMS4wIiwi +d2lkcyI6WyIwOTk3YTFkMC0wZDFkLTRhY2ItYjQwOC1kNWNhNzMxMjFlOTAiXSwieG1zX +3RjZHQiOjE0MTExNDkzMDd9.Xf1n9r9iKDA2JcDThkzClKQ92Z53lcFz6yybGeSC8iPJo +pBQnP3IqGaEsbJx-LyZcZPi2a44SozUvzlSyVwBRpap5nffypFxjGl2rdFFZcNK6lyh3e +RRA4TokTy1-sRLNxaJV7WPvMiq5U97bddEeEDAfhngcsssFqp8-GC0nA9RKX2NDuG7OOv +vR1kusCauWz368X-TOBhlg0_aEKxWRiiqj7Hv8xsNTxtmEg8gppmbUEeqO8fZgGspw-1N +A5jHpUOenRgBtbjH1moviuFdjFEIGJqiTXfzfAhuasFUFFqzYO1kzVggchb9Nym7qBIV7 +QTXs25GDEmU_HQUlZxLjA Encoded: dXNlcj10aXZvbGlhbGVydHNkZXZAbWF5by5lZHUBYXV0aD1CZWFyZXIgZXlKM +GVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNkltTXpOemxNUzJOSmR6ZGxMWHBVV2xkRmEyWl +pSVGd4YkVSVVQwcFFWR1EyT1ZsalpuQmxOVUpRZG5NaUxDSmhiR2NpT2lKU1V6STFOaUl +zSW5nMWRDSTZJakphVVhCS00xVndZbXBCV1ZoWlIyRllSVXBzT0d4V01GUlBTU0lzSW10 +cFpDSTZJakphVVhCS00xVndZbXBCV1ZoWlIyRllSVXBzT0d4V01GUlBTU0o5LmV5SmhkV +1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TU +RBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzloTWpWbVp +tWTVZeTB6WmpZekxUUm1Zakl0T1dFNFlTMWtPV0prWkRBek1qRm1PV0V2SWl3aWFXRjBJ +am94TmpZek5qRXlPVEU1TENKdVltWWlPakUyTmpNMk1USTVNVGtzSW1WNGNDSTZNVFkyT +XpZeE5qZ3hPU3dpWVdsdklqb2lSVEphWjFsSGFUZDJSVGRyZFhWVVR6VjFjMUphT0RWV1 +V6a3lUMEZCUVQwaUxDSmhjSEJmWkdsemNHeGhlVzVoYldVaU9pSk5iMjVwZEc5eWFXNW5 +JRk52YkhWMGFXOXVjeUlzSW1Gd2NHbGtJam9pTWpFek5UY3pNbVl0WXpZek9TMDBOMlJo +TFRsaE9XWXRaVGswTmpSbU5tUm1aVEppSWl3aVlYQndhV1JoWTNJaU9pSXhJaXdpYVdSd +0lqb2lhSFIwY0hNNkx5OXpkSE11ZDJsdVpHOTNjeTV1WlhRdllUSTFabVptT1dNdE0yWT +JNeTAwWm1JeUxUbGhPR0V0WkRsaVpHUXdNekl4WmpsaEx5SXNJbWxrZEhsd0lqb2lZWEJ +3SWl3aWIybGtJam9pWkdZeE5UWTRNbVl0TlRaalpDMDBNekEwTFdGbFl6Z3RZVFJpTURN +elpESXhaVE0zSWl3aWNtZ2lPaUl3TGtGU1NVRnVVRGxtYjIxTlgzTnJMV0ZwZEcwNU1FU +kpabTFuVFVGQlFVRkJRVUZCUVhkQlFVRkJRVUZCUVVGQlUwRkJRUzRpTENKemRXSWlPaU +prWmpFMU5qZ3laaTAxTm1Oa0xUUXpNRFF0WVdWak9DMWhOR0l3TXpOa01qRmxNemNpTEN +KMFpXNWhiblJmY21WbmFXOXVYM05qYjNCbElqb2lUa0VpTENKMGFXUWlPaUpoTWpWbVpt +WTVZeTB6WmpZekxUUm1Zakl0T1dFNFlTMWtPV0prWkRBek1qRm1PV0VpTENKMWRHa2lPa +Up4UzB4QmVteEtZbWhWTm1aU2RGZzFUWGRPTVVGQklpd2lkbVZ5SWpvaU1TNHdJaXdpZD +Jsa2N5STZXeUl3T1RrM1lURmtNQzB3WkRGa0xUUmhZMkl0WWpRd09DMWtOV05oTnpNeE1 +qRmxPVEFpWFN3aWVHMXpYM1JqWkhRaU9qRTBNVEV4TkRrek1EZDkuWGYxbjlyOWlLREEy +SmNEVGhrekNsS1E5Mlo1M2xjRno2eXliR2VTQzhpUEpvcEJRblAzSXFHYUVzYkp4LUx5W +mNaUGkyYTQ0U296VXZ6bFN5VndCUnBhcDVuZmZ5cEZ4akdsMnJkRkZaY05LNmx5aDNlUl +JBNFRva1R5MS1zUkxOeGFKVjdXUHZNaXE1VTk3YmRkRWVFREFmaG5nY3Nzc0ZxcDgtR0M +wbkE5UktYMk5EdUc3T092dlIxa3VzQ2F1V3ozNjhYLVRPQmhsZzBfYUVLeFdSaWlxajdI +djh4c05UeHRtRWc4Z3BwbWJVRWVxTzhmWmdHc3B3LTFOQTVqSHBVT2VuUmdCdGJqSDFtb +3ZpdUZkakZFSUdKcWlUWGZ6ZkFodWFzRlVGRnF6WU8xa3pWZ2djaGI5TnltN3FCSVY3UV +RYczI1R0RFbVVfSFFVbFp4TGpBAQE= Started at Mon Sep 19 13:46:59 2022 Using Mail::IMAPClient version 3.43 on perl 5.034000 Connecting with IO::Socket::SSL PeerAddr outlook.office365.com PeerPor +t 993 Proto tcp Timeout 600 Debug 1 Connected to outlook.office365.com Read: * OK The Microsoft Exchange IMAP4 service is ready. [RABNADY +AUABSADEANwBDAEEAMAAwADMAMQAuAG4AYQBtAHAAcgBkADEANwAuAHAAcgBvAGQALgBv +AHUAdABsAG8AbwBrAC4AYwBvAG0A] Sending: 1 AUTHENTICATE XOAUTH2 Sent 24 bytes Read: + Sending: dXNlcj10aXZvbGlhbGVydHNkZXZAbWF5by5lZHUBYXV0aD1CZWFyZXIgZXlKM +GVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNkltTXpOemxNUzJOSmR6ZGxMWHBVV2xkRmEyWl +pSVGd4YkVSVVQwcFFWR1EyT1ZsalpuQmxOVUpRZG5NaUxDSmhiR2NpT2lKU1V6STFOaUl +zSW5nMWRDSTZJakphVVhCS00xVndZbXBCV1ZoWlIyRllSVXBzT0d4V01GUlBTU0lzSW10 +cFpDSTZJakphVVhCS00xVndZbXBCV1ZoWlIyRllSVXBzT0d4V01GUlBTU0o5LmV5SmhkV +1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TU +RBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzloTWpWbVp +tWTVZeTB6WmpZekxUUm1Zakl0T1dFNFlTMWtPV0prWkRBek1qRm1PV0V2SWl3aWFXRjBJ +am94TmpZek5qRXlPVEU1TENKdVltWWlPakUyTmpNMk1USTVNVGtzSW1WNGNDSTZNVFkyT +XpZeE5qZ3hPU3dpWVdsdklqb2lSVEphWjFsSGFUZDJSVGRyZFhWVVR6VjFjMUphT0RWV1 +V6a3lUMEZCUVQwaUxDSmhjSEJmWkdsemNHeGhlVzVoYldVaU9pSk5iMjVwZEc5eWFXNW5 +JRk52YkhWMGFXOXVjeUlzSW1Gd2NHbGtJam9pTWpFek5UY3pNbVl0WXpZek9TMDBOMlJo +TFRsaE9XWXRaVGswTmpSbU5tUm1aVEppSWl3aVlYQndhV1JoWTNJaU9pSXhJaXdpYVdSd +0lqb2lhSFIwY0hNNkx5OXpkSE11ZDJsdVpHOTNjeTV1WlhRdllUSTFabVptT1dNdE0yWT +JNeTAwWm1JeUxUbGhPR0V0WkRsaVpHUXdNekl4WmpsaEx5SXNJbWxrZEhsd0lqb2lZWEJ +3SWl3aWIybGtJam9pWkdZeE5UWTRNbVl0TlRaalpDMDBNekEwTFdGbFl6Z3RZVFJpTURN +elpESXhaVE0zSWl3aWNtZ2lPaUl3TGtGU1NVRnVVRGxtYjIxTlgzTnJMV0ZwZEcwNU1FU +kpabTFuVFVGQlFVRkJRVUZCUVhkQlFVRkJRVUZCUVVGQlUwRkJRUzRpTENKemRXSWlPaU +prWmpFMU5qZ3laaTAxTm1Oa0xUUXpNRFF0WVdWak9DMWhOR0l3TXpOa01qRmxNemNpTEN +KMFpXNWhiblJmY21WbmFXOXVYM05qYjNCbElqb2lUa0VpTENKMGFXUWlPaUpoTWpWbVpt +WTVZeTB6WmpZekxUUm1Zakl0T1dFNFlTMWtPV0prWkRBek1qRm1PV0VpTENKMWRHa2lPa +Up4UzB4QmVteEtZbWhWTm1aU2RGZzFUWGRPTVVGQklpd2lkbVZ5SWpvaU1TNHdJaXdpZD +Jsa2N5STZXeUl3T1RrM1lURmtNQzB3WkRGa0xUUmhZMkl0WWpRd09DMWtOV05oTnpNeE1 +qRmxPVEFpWFN3aWVHMXpYM1JqWkhRaU9qRTBNVEV4TkRrek1EZDkuWGYxbjlyOWlLREEy +SmNEVGhrekNsS1E5Mlo1M2xjRno2eXliR2VTQzhpUEpvcEJRblAzSXFHYUVzYkp4LUx5W +mNaUGkyYTQ0U296VXZ6bFN5VndCUnBhcDVuZmZ5cEZ4akdsMnJkRkZaY05LNmx5aDNlUl +JBNFRva1R5MS1zUkxOeGFKVjdXUHZNaXE1VTk3YmRkRWVFREFmaG5nY3Nzc0ZxcDgtR0M +wbkE5UktYMk5EdUc3T092dlIxa3VzQ2F1V3ozNjhYLVRPQmhsZzBfYUVLeFdSaWlxajdI +djh4c05UeHRtRWc4Z3BwbWJVRWVxTzhmWmdHc3B3LTFOQTVqSHBVT2VuUmdCdGJqSDFtb +3ZpdUZkakZFSUdKcWlUWGZ6ZkFodWFzRlVGRnF6WU8xa3pWZ2djaGI5TnltN3FCSVY3UV +RYczI1R0RFbVVfSFFVbFp4TGpBAQE= Sent 2094 bytes Read: 1 NO AUTHENTICATE failed. ERROR: 1 NO AUTHENTICATE failed. at /usr/local/Cellar/perl/5.34.0/lib/ +perl5/site_perl/5.34.0/Mail/IMAPClient.pm line 3319. Mail::IMAPClient::authenticate(Mail::IMAPClient=HASH(0x7fcff021405 +8), "XOAUTH2", CODE(0x7fcfed2e4338)) called at ./imap_ad_clientcreds_ +test.pl line 41 Auth error: 1 NO AUTHENTICATE failed. at ./imap_ad_clientcreds_test.pl + line 41.

If you could offer advice or tell me who to ask, I'd be grateful!

Thank you!

-- Pat


In reply to Module use: Auth::AD::Azure, Mail::IMAPClient for Azure AD Exchange 365 by pspinler@yahoo.com

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.