2

CredentialPickerユーザー名とパスワードの入力を求めるために aを使用したいと考えています。このクラスのインスタンスを構成するとCredentialPickerOptions.PreviousCredential、以前に によって取得された値に設定できCredentialPickerResults.Credentialます。これにより、ダイアログに資格情報が事前入力されると思います。

ただし、この値を永続化することは簡単ではないようです。これは でありIBuffer、そのメンバーには関連する資格情報が含まれていないようです。Programming Windows 8 Apps with HTML, CSS, and JavaScript , page 657 は、これが可能であることを意味します:

クレデンシャルを不透明なIBufferバイト配列として含む です。これは、必要に応じて独自の永続的な状態に保存し、後でピッカーに戻すことができるものです。すぐにわかります。

残念ながら、 がメモリからに値を戻すことができるという事実のみを参照しているように見えます。それがどのように持続されているかについての言及は見つかりませんでした。PreviousCredential

また、推奨されるアプローチを使用して資格情報を保持したいと思いますがPasswordVault、これは資格情報を IBuffer ではなくユーザー名とパスワードの文字列として保存することしかできないようです。

4

1 に答える 1

3

時間を割いて質問していただきありがとうございます。この本のその部分については、もっと明確に説明できたはずだと確信しています。確かに、第 14 章に費やした時間は思ったほど多くありませんでしたが、次の版でそれを改善しようと思います。あなたのようなフィードバックは、どこを改善する必要があるかを知る上で非常に貴重なので、感謝しています.

とにかく、バッファをファイルに書き込むことは、第8章で言及されたものです(また、ここで再び言及される可能性があります... 325ページですが、IBufferについては明示的に言及されていません)。以下に示すように、Windows.Storage.FileIO クラスを使用した簡単な作業です (約束です!)。

まず、明確化。入力した資格情報を保存するには、2 つの方法があります。プレーンテキストの資格情報を保存する場合は、資格情報ロッカーを絶対に使用してください。ここでの利点は、ローミング パスワードが PC 設定で有効になっている場合 (既定では)、これらの資格情報がユーザーと共に自動的にローミングできることです。それ以外の場合は、不透明な CredentialPickerResults.credential プロパティをファイルに直接保存できます。すでに暗号化およびスクランブルされているため、その場合は資格情報ロッカーを使用する必要はありません。

ここで、IBuffer である資格情報プロパティを保存/読み込みます。これには、FileIO.writeBufferAsync を使用して保存し、FileIO.readBufferAsync を使用して再ロードします。

これを示すために、資格情報ピッカーのサンプル、シナリオ 3 を変更しました。資格情報プロパティを保存するために、pickAsync の完成したハンドラーの最後に次のコードを追加しました。

//results.credential will be null if the user cancels
if (results.credential != null) {
    //Having retrieved a credential, write the opaque buffer to a file
    var option = Windows.Storage.CreationCollisionOption.replaceExisting;

    Windows.Storage.ApplicationData.current.localFolder.createFileAsync("credbuffer.dat", option).then(function (file) {
        return Windows.Storage.FileIO.writeBufferAsync(file, results.credential);
    }).done(function () {
        //No results for this operation
        console.log("credbuffer.dat written.");
    }, function (e) {
        console.log("Could not create credbuffer.dat file.");
    });
}

次に、可能であれば、その資格情報をロードする新しい関数を作成しました。これは、launchCredPicker の代わりに Launch ボタンのクリックで呼び出されます。

//In the page ready method:
document.getElementById("button1").addEventListener("click", readPrevCredentialAndLaunch, false);


//Added
function readPrevCredentialAndLaunch() {
    Windows.Storage.ApplicationData.current.localFolder.getFileAsync("credbuffer.dat").then(function (file) {
        return Windows.Storage.FileIO.readBufferAsync(file);
    }).done(function (buffer) {
        console.log("Read from credbuffer.dat");
        launchCredPicker(buffer);
    }, function (e) {
        console.log("Could not reopen credbuffer.dat; launching default");
        launchCredPicker(null);
    });
}

//Modified to take a buffer
function launchCredPicker(prevCredBuffer) {    
    try {
        var options = new Windows.Security.Credentials.UI.CredentialPickerOptions();

        //Other options omitted

        if (prevCredBuffer != null) {
            options.previousCredential = prevCredBuffer;
        }

    //...

それでおしまい。修正した JS サンプルをhttp://www.kraigbrockschmidt.com/src/CredentialPickerJS_modified.zipに置きました。

クレイグ

HTML、CSS、および JavaScript による Windows 8 アプリのプログラミングの著者(無料の電子ブック)

于 2013-02-28T05:54:38.413 に答える