VMime Book 日本語訳 第6章 6-3
2020-07-01 K.OHWADA
原文
VMime Book: A Developer’s Guide To VMime
https://www.vmime.org/public/documentation/book/vmime-book.pdf
第6章 メッセージングサービスの操作
Working with Messaging Services
6.3 ユーザー資格情報とオーセンティケーター
User credentials and authenticators
一部のサービスでは、セッションを開くためにいくつかのユーザー資格情報(ユーザー名やパスワードなど)が必要です。 VMimeでは、ユーザー資格情報は、セッションプロパティで、またはカスタムオーセンティケーター(コールバック)を使用して指定できます。
リスト6.1:セッションプロパティを使用したユーザー資格情報の設定
Setting user credentials using session properties
vmime: : shared ptr <vmime: : net : : session> sess ; // Suppose we have a session sess−>getProperties()[”store.imap.auth.username”] = ”vincent”; sess−>getProperties()[”store.imap.auth.password”] = ”my−password”;
推奨されていませんが、ユーザー名とパスワードを接続URLで直接指定することもできます(例:imap:// username:password@imap.example.com/)。 これは、ユーザー資格情報としてユーザー名とパスワードを必要とするサービスでのみ機能し、その他の情報は機能しません。 セッションプロパティでユーザー名/パスワードを設定するのがあまり便利でない場合や、不可能な場合があります(拡張SASLメカニズムなど)。 そのため、VMimeはユーザー資格情報を取得する別の方法であるオーセンティケーターオブジェクトを提供しています。 基本的に、オーセンティケーターは、ユーザーの資格情報をオンデマンドで返すことができるオブジェクトです(コールバックなど)。
現在、VMimeには2つのタイプのオーセンティケーターがあります。基本オーセンティケーター(クラスvmime :: security :: authenticationator)と、SASLサポートが有効になっている場合はSASLオーセンティケーター(クラスvmime :: security :: sasl :: SASLAuthenticator)です。 。 通常、デフォルトの実装を使用するか、少なくとも独自の実装をそれらから継承する必要があります。 次の例は、カスタムオーセンティケーターを使用してユーザーに資格情報の入力を要求する方法を示しています。
リスト6.2:シンプルな対話式のオーセンティケーター
A simple interactive authenticator
class myAuthenticator : public vmime::security::defaultAuthenticator { const string getUsername() const { } const string getPassword() const { std::cout << ”Enter your password: ” << std::endl; vmime::string res; std::getline(std::cin, res); return res; } };
これはそれを使用する方法です:
````
// First, create a session
vmime::shared ptr <vmime::net::session> sess = vmime::net::session::create();
// Next, initialize a service which will use our authenticator
vmime::shared ptr <vmime::net::store> st =
s e s s −> g e t S t o r e ( v m i m e : : u t i l i t y : : u r l ( ” i m a p : / / i m a p . e x a m p l e . c o m ” ) ,
/∗ use our authenticator ∗/ vmime::make shared
注: オーセンティケーターオブジェクトは、一度に1つのサービスでのみ使用する必要があります。 サービス名(SASL)を取得する必要がある場合があるため、この認証プロセスが必要です。 もちろん、この例は非常に単純化されています。 たとえば、複数の認証メカニズムが試行された場合、ユーザーは同じ情報を複数回入力するように要求されることがあります。 キャッシュをサポートするオーセンティケーターのより複雑な実装については、Example6を参照してください。 SASLを使用する場合(つまり、options.saslがtrueに設定されている場合)、オーセンティケーターは vmime :: security :: sasl :: SASLAuthenticatorまたはvmime :: security :: sasl :: defaultSASLAuthenticatorを継承する必要があります。 SASL固有のメソッドgetAcceptableMechanisms()およびsetSASLMechanism()は使用しません。 Example6を見て、SASLオーセンティケーターの実装を確認してください。 リスト6.3:シンプルなSASLオーセンティケーター A simple SASL authenticator
class mySASLAuthenticator : public vmime::security::sasl::defaultSASLAuthenticator
{
typedef vmime: : security : : sasl : :SASLMechanism mechanism; // save us typing
const std : : vector <vmime: : shared ptr