1

WCF で構築された API を使用するときに認証が 1 回だけで済むようにするための最善の方法は何ですか?

私の現在のバインディングと動作は以下のとおりです

    <bindings>
        <wsHttpBinding>
            <binding name="wsHttp">
                <security mode="TransportWithMessageCredential">
                    <transport/>
                    <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="true"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    </behaviors>

次は、クライアント アプリで認証に使用しているものです (現在、WCF を呼び出すたびにこれを行う必要があります)。

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "foo"
client.ClientCredentials.UserName.Password = "bar"
Dim ProductList As List(Of Product) = client.GetProducts()

私がやりたいのは、これらの資格情報を使用して API で認証し、クライアント アプリケーションが Web サービス プロジェクトを使用している間、何らかのタイプのトークンを取得することです。私はこれを私のために確立したと思いましたか?

4

2 に答える 2

3

イントラネットを使用している場合、構成のみで Windows 認証を "無料" で処理できます。

これが適切でない場合、トークン サービスは問題なく動作しますが、状況によっては多すぎる場合があります。

私が取り組んでいるアプリケーションには、最低限の認証が必要でした。私たちのサーバーとクライアントは (非常に安全な) イントラネット内で実行されるため、X.509 証明書を使用して通信を暗号化するという要件はあまり気にしませんでした。これは、ユーザー名認証を使用している場合に必要です。

そのため、ユーザー名と (暗号化された) パスワードをメッセージ ヘッダーに追加するカスタム動作をクライアントに追加し、サーバーでそれらを検証する別のカスタム動作を追加しました。

すべて非常にシンプルで、クライアント側のサービス アクセス レイヤーやサービス コントラクトの実装を変更する必要はありません。また、すべて構成によって行われるため、もう少し強力なものに移行する必要がある場合は、簡単に移行できます。

于 2008-08-30T21:56:23.107 に答える
1

100% 確信が持てない回答をするのは嫌いですが、これまでのところ回答がないため、この場合、潜在的に正しい回答で問題ないのではないかと考えています。

私の知る限り、WCF ですぐに使用できるセッション トークン メカニズムはありません。あなたが望む方法。WCF にはセッション メカニズムがあることを明確にしておく必要がありますが、これはメッセージの順序を保証することに重点を置いており、認証セッションを作成するための理想的なツールではありません。

あらゆる種類のレガシー SOAP スタックを処理する独自のセッション メカニズムを実装したプロジェクトの作業を終えたばかりですが、認証済みセッションを実装する推奨される方法は、Pablo Cibraro のようなセキュア トークン サービス (STS) を使用することだと思います。

詳細が必要な場合は、大声でお知らせください。ただし、Pablo のブログには、先に進むのに十分な情報が含まれていると思います。

于 2008-08-29T08:24:36.853 に答える