ログインをおこなった後に、クライアントアプリケーションがIMAPSサーバ以外のサーバにアクセスする場合に、認証情報を受け渡す事ができます。この機能はIMAPSサーバの認証機構と業務サーバとの間でSSO的な振る舞いをおこないたい場合に便利です。SSO的な振る舞いとは以下のような動作を指します。
IMAPSサーバで認証していない場合、クライアントからのアクセスはエラーとなる
IMAPSサーバで認証済の場合、クライアントからのアクセスは成功する
このような振る舞いを実現するためには、以下のようにします。
クライアントからアクセスする業務サーバ上のサーバアプリケーションに、認証モジュールを組み込む
クライアントアプリケーションはIMAPSで認証し、業務サーバにアクセスする際には認証情報を付与してアクセスする
使用例:Android
import java.net.Proxy;
・
・
private void connection(Context context, String url) {
new AsyncConnectTask(context, url).execute();
}
class AsyncConnectTask extends AsyncTask <String, Integer, String> {
LoginManager mLoginManager = null;
String mURL = null;
・・・・
public AsyncConnectTask(Context context, String url) {
mLoginManager = new LoginManager(context);
mURL = url;
・・・・
}
protected String doInBackground(String... params) {
try {
URL url = new URL(mURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
・・・
mLoginManager.setRequestAuth(con);
con.connect();
mLoginManager.checkServerTimeout(con);
・・・
mLoginManager.saveResponseAuth(con);
・・・
} catch (IMAPSAuthTimeOutException e) {
// ログアウト処理の実装を行うことを推奨します。
} catch (例外キャッチ) {
// キャッチした例外の内容に応じて、例外処理を実装します。
}
}使用例:iOS
- (void)func {
NSURL *url = [NSURL URLWithString:接続先URL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager setRequestAuth:request error:&anError];
if(result == NO) {
// それぞれのエラーの実装.
}
[NSURLConnection connectionWithRequest:request delegate:self];
[loginManager setRequestAuth:request error:&anError];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
IMALoginManager *loginManager = [[IMALoginManager alloc] init];
NSError *anError = nil;
BOOL result = [loginManager checkServerTimeout:response error:&error];
if(result == NO) {
// それぞれのエラーの実装.
} else {
result = [loginManager saveResponseAuth:response error:&error];
if(result == NO) {
// それぞれのエラーの実装.
}
}
}