2

アダプター・ベースの認証を使用する 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 の間の接続を強制的にリセットする方法はありますか? (アプリを再起動するまで)

4

1 に答える 1