2

私は最近ACS、AAL、WAADを調べたばかりであり、ユーザーをIDPのログインページにリダイレクトすることは避けたいと思います。ユーザーを自分のサイト内にとどめ、認証するユーザーを選択するためのドロップダウンと、ユーザー名とパスワードを要求する領域を提示して、コードを介してトークンを取得したいと思います。これは可能ですか?

私はいくつかのサンプルアプリケーションをレビューし、簡単なモックアップを作成していますが、うまく機能していないようです。

        _authContext = new AuthenticationContext("https://littledeadbunny.accesscontrol.windows.net");

        string enteredEmailDomain = UserNameTextbox.Text.Substring(UserNameTextbox.Text.IndexOf('@') + 1);

        IList<IdentityProviderDescriptor> idpdList = _authContext.GetProviders("http://littledeadbunny.com/NonInteractive");
        foreach (IdentityProviderDescriptor idpd in idpdList)
        {
            if (String.Compare(ServiceRealmDropDownList.SelectedValue, idpd.Name, StringComparison.OrdinalIgnoreCase) == 0)
            {
                Credential credential;
                credential = new UsernamePasswordCredential(enteredEmailDomain, UserNameTextbox.Text, PasswordTextbox.Text);

                _assertionCredential = _authContext.AcquireToken("http://littledeadbunny.com/NonInteractive", idpd, credential);

                return;
            }
        }

上記のコードを使用して、Windows Azure Active Directoryユーザー(admin)を使用しようとすると、「ルートレベルのデータが無効です。1行目、1行目」というエラーが表示されます。トークンを取得しようとしています。

Googleを使用すると、「0x8010000C:要求されたプロトコルに一致するIDプロバイダーがありません」というエラーが表示されます。

動作するサンプルがある場合は?明らかに間違ったことをしている場合は、訂正していただければ幸いです。

4

2 に答える 2

1

これは、パッシブ ID プロバイダーではサポートされていません。Google や Facebook などの IdP は、セキュリティの問題やフィッシング攻撃の可能性につながるため、他の人が資格情報を収集することを望んでいません。また、許可ダイアログ (ユーザーにデータを解放するかどうかをユーザーに尋ねる画面) を表示できる必要があるため、ブラウザーがリダイレクトしないと実行できないため、サポートしていません。さらに、特に Google は 2 要素認証をサポートしていますが、これは複製できませんでした。一般に、資格情報を収集すると、間違ったパスワードや忘れたパスワードなど、他の UI の問題を回避するワームの缶全体が開かれます。

ユーザーはすでに Google にログインしており、そこに Cookie を持っている可能性がかなり高いため、これは一般的にユーザー エクスペリエンスも悪くなります。もしそうなら、そして彼らがすでにあなたのアプリに同意しているなら、彼らは黙ってあなたにリダイレクトされます. あなたのシナリオでは、ユーザーがすでにログインしている場合でも、ユーザー名/パスワードを提供する必要があります。

この種のログインを行う正しい方法は、ユーザーが IdP でログインできるようにするブラウザー コントロールをアプリにレンダリングすることです。これは、AAL が支援するものです。

于 2013-03-05T19:17:42.537 に答える
0

同じエラーが発生しました。パワースクリプトを実行すると、そのエラーが解決しました

PS C:\windows\system32> $replyUrl = New-MsolServicePrincipalAddresses -アドレスhttps://mydomain.accesscontrol.windows.net/

PS C:\windows\system32> New-MsolServicePrincipal -ServicePrincipalNames @(" https://mydomain.accesscontrol.windows.net/ ") -DisplayName "MyDomain Namespace" -Addresses $replyUrl

しかし、とにかく 403 パーミッション エラーで立ち往生しています

あなたがさらに取得する場合、私はどのように知りたいです:)

于 2013-04-05T11:59:50.630 に答える