2-legged OAuth with IMAP
OAuth is an open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
This article describes generic OAuth class.
If you are using Gmail please read 2-legged OAuth authentication with Gmail.
If you are using Gmail please read 2-legged OAuth authentication with Gmail.
Remember to add reference to Mail.dll .NET IMAP component and appropriate namespaces.
// C#
using Limilabs.Client.Authentication;
using Limilabs.Client.IMAP;
string consumerKey = "your_domain.com";
string consumerSecret = "your_oauth_consumer_secret";
string emailAccount = "address@your_domain.com";
using (Imap client = new Imap())
{
client.ConnectSSL("imap.gmail.com");
string imapUrl = string.Format(
"https://mail.google.com/mail/b/{0}/imap/?xoauth_requestor_id={1}",
emailAccount,
HttpUtility.UrlEncode(emailAccount));
string oauthImapKey = OAuth.ForUrl(imapUrl)
.Consumer(consumerKey, consumerSecret)
.SignatureMethod(SignatureType.HMACSHA1)
.Sign()
.GetXOAuthKey();
client.LoginOAUTH(oauthImapKey);
//...
client.Close();
}
' VB.NET
Imports Limilabs.Client.Authentication
Imports Limilabs.Client.IMAP
Dim consumerKey As String = "example.com"
Dim consumerSecret As String = "secret"
Dim emailAccount As String = "pat@example.com"
Using client As New Imap()
client.ConnectSSL("imap.gmail.com")
Dim imapUrl As String = String.Format( _
"https://mail.google.com/mail/b/{0}/imap/?xoauth_requestor_id={1}", _
emailAccount, _
HttpUtility.UrlEncode(emailAccount))
Dim oauthImapKey As String = OAuth.ForUrl(imapUrl) _
.Consumer(consumerKey, consumerSecret) _
.SignatureMethod(SignatureType.HMACSHA1) _
.Sign() _
.GetXOAuthKeyForImap()
client.LoginOAUTH(oauthImapKey)
'...
client.Close()
End Using
June 14th, 2015 at 13:32
I’m trying to run this example in a ASP.NET with:
string consumerKey = “anonymous”;
string consumerSecret = “anonymous”;
string emailAccount = “mymail@gmail.com”;
using (Imap client = new Imap())
{
client.ConnectSSL(“imap.gmail.com”);
…
The browser doesn’t show me the Gmail login page.
And when trying to login (line 22) i got this “[ALERT] Invalid credentials (Failure)”.
What am I doing wrong?
June 17th, 2015 at 06:39
@Gabirel,
I think you don’t want to use 2-legged but rather 3-legged OAuth:
http://www.limilabs.com/blog/oauth-with-imap