アダプター・ベースの認証を使用する Worklight v6.0 アプリケーションがあります。
アダプターは、基本認証を使用してバックエンド REST サービスを呼び出す HTTP アダプターです。
アダプタとバックエンド サービスの間にセッションや Cookie はありません。アダプター記述子で、cookiePolicy を IGNORE_COOKIES に設定しました。アダプターからバックエンドへの各要求は、その要求の基本認証ヘッダーで認証されます。
アダプターの各プロシージャーでは、connectAs が endUser に設定されています。
<?xml version="1.0" encoding="UTF-8"?>
<wl:adapter name="MyAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wl="http://www.worklight.com/integration" xmlns:http="http://www.worklight.com/integration/http">
<displayName>MyAdapter</displayName>
<description>MyAdapter</description>
<connectivity>
<connectionPolicy xsi:type="http:HTTPConnectionPolicyType" cookiePolicy="IGNORE_COOKIES">
<protocol>http</protocol>
<domain>localhost</domain>
<port>9080</port>
<!-- Following properties used by adapter's key manager for choosing
<authentication>
<basic />
</authentication>
</connectionPolicy>
<loadConstraints maxConcurrentConnectionsPerNode="2" />
</connectivity>
<procedure name="submitAuthentication"></procedure>
<procedure connectAs="endUser" name="getCurrentUser"
securityTest="MyAdapter-securityTest" />
</wl:adapter>
これはすべてうまくいきます。モバイル アプリはアダプターで保護されたプロシージャを呼び出します。これにより認証がトリガーされ、認証が正常に完了し、プロシージャが再度呼び出されます。ネットワーク トレースで、アダプターからバックエンド。モバイル アプリが既に認証されているときにアダプター呼び出しを行う場合、アダプターは正しい Basic Auth ヘッダーを使用して back en を呼び出すだけです。複数のモバイル アプリが同時に接続され、異なるユーザーとしてログインしている場合、アダプターはそれを呼び出したユーザーの正しい Basic Auth ヘッダーを使用します。
唯一機能しないのは、モバイル アプリがアダプターを呼び出し、user1 として認証し、バックエンドから user1 の正しい結果を取得し、WL.Client.logout() を呼び出し、アダプターを別の呼び出しを行い、認証する場合です。今回はユーザー2として。
アダプタ プロシージャでは、WL.Server.getActiveUser() を呼び出してアクティブなユーザーを確認します。確かに、ユーザーは正しい (user2) です。しかし、呼び出しがバックエンドに送信されると、Worklight が追加する Basic Auth ヘッダーに user1 の資格情報が含まれるため、モバイル アプリは間違った結果を取得します。
アプリを終了して再起動すると、すべて問題なく、ユーザー 2 として直接認証し、user2 の正しい結果を得ることができます。問題となる唯一のケースは、モバイル・アプリと Worklight Server の間の単一セッションで別のユーザーとしてログアウト/ログインし直す場合です。
これは、Worklight アダプターでの基本認証の使用に関する既知の制限ですか? ログアウト時にモバイル・クライアントと Worklight Server の間の接続を強制的にリセットする方法はありますか? (アプリを再起動するまで)