VMime Book 日本語訳 第6章 6-3

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 > getAcceptableMechanisms (const std::vector <vmime::shared ptr >& available, vmime::shared ptr suggested) const { } void setSASLMechanism(vmime: : shared ptr mech) { // This is called when the authentication process is going to // try the specified mechanism. // // The mechanism name is in mech−>getName() defaultSASLAuthenticator::setSASLMechanism(mech); } // ...implement getUsername() and getPassword()... };