GrapeCity Secure Mail for .NET 4.0J > メールプロトコルの概要 > OAuthの概要 |
OAuth を使用してユーザーを認証するには、サーバーの OAuth インタフェースからアクセストークンを取得して、サーバーにログインします。次のコードは、Imap コンポーネントを使用してユーザーを認証する例です。SMTP/POP の場合も、同じように実装します。
C# OAuth と Imap による認証 |
コードのコピー |
---|---|
/// <summary> /// Imap サーバーに接続して、OAuth を使用してユーザーを認証します。 /// </summary> /// <param name="myImap">接続して認証するための IMAP インスタンス。</param> /// <param name="hostNameOrAddress">サーバーのホスト名または IP アドレス。</param> /// <param name="emailAddress">ユーザーのEメールアドレス。</param> /// <param name="accessToken">サーバーの OAuth インタフェースから提供されたアクセストークン。</param> public void AuthenticateWithOAuth(Imap myImap, string hostNameOrAddress, string emailAddress, string accessToken) { //暗号化モードを設定します。- Implicit/Explicit myImap.Session.Security.Encrypt = Encrypt.Implicit; //必要に応じて SSL/TLS のネゴシエーションの利用可能なプロトコルを設定します(デフォルトはSslProtocols.Default)。 //TLS 1.1/1.2 を使用する場合は、.NET 4.5+ が必要です。詳細については、MSDN ライブラリの SslProtocols 列挙体を参照してください。 myImap.Session.Security.Protocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12; //サーバー証明書の検証コールバックを指定します。 myImap.Session.Security.ValidationCallback = remoteCertificateValidation; //サーバーの IP アドレスとポート番号を設定します。サーバーが非標準のポート番号を使用する場合は、非標準ポート番号をここで指定する必要があります。 //GetDefaultPort()メソッドはセキュリティ設定に使用される一般的なポート番号を返します。 myImap.Session.RemoteEndPoint = new IPEndPoint(hostNameOrAddress, Imap.GetDefaultPort(myImap.Session)); //サーバーに接続します。 myImap.Connect(); //ユーザーを認証します。 //OAuth2 は Authentication.Auto によって自動的に使用されないので、次のように指定する必要があります。 myImap.Session.Authentication = Authentication.OAuth2; myImap.Session.Username = emailAddress; myImap.Session.Password = accessToken; myImap.Authenticate(); } private bool remoteCertificateValidation(Object sender, X509Certificate remoteCertificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { //このコードについては、すべてのサーバー証明書を受け入れます。詳細については、このユーザーガイドの Security トピックまたは //MSDN ライブラリの System.Net.Security.RemoteCertificateValidationCallback トピックを参照してください。 return true; } |
Visual Basic OAuth と Imap による認証 |
コードのコピー |
---|---|
''' <summary> ''' Imap サーバーに接続して、OAuth を使用してユーザーを認証します。 ''' </summary> ''' <param name="myImap">接続して認証するための IMAP インスタンス。</param> ''' <param name="hostNameOrAddress">サーバーのホスト名または IP アドレス。</param> ''' <param name="emailAddress">ユーザーのEメールアドレス。</param> ''' <param name="accessToken">サーバーの OAuth インタフェースから提供されたアクセストークン。</param> Public Sub AuthenticateWithOAuth(ByVal myImap As Imap, ByVal hostNameOrAddress As String, ByVal emailAddress As String, ByVal accessToken As String) '暗号化モードを設定します。 - Implicit/Explicit myImap.Session.Security.Encrypt = Encrypt.Implicit '必要に応じて SSL/TLS のネゴシエーションの利用可能なプロトコルを設定します(デフォルトはSslProtocols.Default)。 'TLS 1.1/1.2 を使用する場合は、.NET 4.5+ が必要です。詳細については、MSDN ライブラリの SslProtocols 列挙体を参照してください。 myImap.Session.Security.Protocols = SslProtocols.Ssl3 Or SslProtocols.Tls Or SslProtocols.Tls11 Or SslProtocols.Tls12 'サーバー証明書の検証コールバックを指定します。 myImap.Session.Security.ValidationCallback = AddressOf remoteCertificateValidation 'サーバーの IP アドレスとポート番号を設定します。サーバーが非標準のポート番号を使用する場合は、非標準ポート番号をここで指定する必要があります。 'GetDefaultPort() メソッドはセキュリティ設定に使用される一般的なポート番号を返します。 myImap.Session.RemoteEndPoint = New IPEndPoint(hostNameOrAddress, Imap.GetDefaultPort(myImap.Session)) 'サーバーに接続します。 myImap.Connect() 'ユーザーを認証します。 'OAuth2 は Authentication.Auto によって自動的に使用されないので、次のように指定する必要があります。 myImap.Session.Authentication = Authentication.OAuth2 myImap.Session.Username = emailAddress myImap.Session.Password = accessToken myImap.Authenticate() End Sub Private Function remoteCertificateValidation(ByVal sender As Object, ByVal remoteCertificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean 'このコードについては、すべてのサーバー証明書を受け入れます。詳細については、このユーザーガイドの Security トピックまたは 'MSDN ライブラリの System.Net.Security.RemoteCertificateValidationCallback トピックを参照してください。 Return True End Function |
サーバーのインタフェースからアクセストークンを取得するには、お使いのサーバーのユーザーガイドを参照してください。実装方法はサーバーによって異なります。本トピックでは、Gmail API に対する実装方法について説明します。デベロッパー資格情報(client_secret.json)とGmail APIをダウンロードするには、https://developers.google.com/gmail/api/quickstart/dotnetを参照してください。
次のコードは、Web ブラウザが起動できる Windows Forms のような開発環境でアクセストークンを取得する例です。
C# Gmail 用のアクセストークンの取得 |
コードのコピー |
---|---|
/// <summary> /// ユーザーの Gmail アカウントを認証するために OAuth アクセストークンを取得します。 /// </summary> /// <param name="emailAddress">Gmail 用のメールアドレスまたはユーザー名。</param> /// <returns>OAuth アクセストークン。</returns> /// <remarks> /// ユーザーによりアプリケーションから独自のアカウントにアクセスできることを確認するために Web ブラウザを起動します。 /// Google.Apis.Gmail.v1 1.10.1.425 以降のバージョンと互換性がない場合があります。 /// </remarks> public async Task<string> GetGmailOAuthAccessTokenAsync(string emailAddress) { UserCredential credential; //client_secrets.json - Gmail のデベロッパー資格情報ファイル。 //詳細については、https://developers.google.com/gmail/api/quickstart/dotnet を参照してください。 using (FileStream fs = File.OpenRead("client_secrets.json")) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(fs).Secrets, new[] { GmailService.Scope.MailGoogleCom }, emailAddress, CancellationToken.None); } return await credential.GetAccessTokenForRequestAsync(null, CancellationToken.None); } |
Visual Basic Gmail 用のアクセストークンの取得 |
コードのコピー |
---|---|
''' <summary> ''' ユーザーの Gmail アカウントを認証するために OAuth アクセストークンを取得します。 ''' </summary> ''' <param name="emailAddress">Gmail 用のメールアドレスまたはユーザー名。</param> ''' <returns>OAuth アクセストークン。</returns> ''' <remarks> ''' ユーザーによりアプリケーションから独自のアカウントにアクセスできることを確認するために Web ブラウザを起動します。 ''' Google.Apis.Gmail.v1 1.10.1.425 以降のバージョンと互換性がない場合があります。 ''' </remarks> Public Async Function GetGmailOAuthAccessTokenAsync(ByVal emailAddress As String) As Task(Of String) Dim credential As UserCredential 'client_secrets.json - Gmail のデベロッパー資格情報ファイル。 '詳細については、https://developers.google.com/gmail/api/quickstart/dotnet を参照してください。 Using fs As FileStream = File.OpenRead("client_secrets.json") credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(fs).Secrets, { GmailService.Scope.MailGoogleCom }, emailAddress, CancellationToken.None) End Using Return Await credential.GetAccessTokenForRequestAsync(Nothing, CancellationToken.None) End Function |
ASP.NET のようなアプリケーションについては、https://developers.google.com/api-client-library/dotnet/guide/aaa_oauthを参照してください。アクセストークンを取得する方法については、UserCredential および ServiceAccountCredential クラスのリファレンスドキュメントを参照してください。