2

私は ACS を使用するいくつかの例を見ています。

チュートリアルをオンラインで見たところ、必要なのは構成内の次の行だけだったようです。

  httpRuntime requestValidationMode="2.0"

しかし、この サンプル プロジェクトの他のいくつかの例では、 SimpleMVC4 の構成にそのような行がありませんでした。さらに悪いことに、ACS ライブラリを参照しているものは何もありませんでした。

一方、MVC3 のサンプルには、javascript への ajax リクエストなど意味不明な部分がたくさんありましたね!?

    public const string HrdPath = "v2/metadata/IdentityProviders.js";

    /// <summary>
    /// Gets the url with its query string representing this request
    /// </summary>
    /// <returns></returns>
    public string GetUrlWithQueryString()
    {
        uriBuilder.Path = HrdPath;
        uriBuilder.Query = parameters.ToQueryString();

        return uriBuilder.Uri.AbsoluteUri;
    }

および Raxor ビューで

    $("#signIn").click(function () {
        //
        // Explicit JSONP callback can be used to do client side caching of identity provider data.
        //
        $.ajax({
            url: "@Html.Raw(Model.GetUrlWithQueryString())",
            dataType: "jsonp",

は!?

簡単な(ばかげた証明)ポインタをいくつか取得できますか?

  1. 私は依拠当事者です
  2. 私は MVCコントローラー アクションを持っています。ここでユーザーに、使用できる ID プロバイダー (IP) と、それぞれの URL と、以下の手順 (3) で検証されるトークンの生成を伝えたいと思います。C# コードでこれを行うにはどうすればよいですか?
  3. クライアント、ACS、IP のビジネスが完了したら、それが何であるかは気にしません。私が懸念している限り、それらはすべてクライアント、ACS、および IP の間で行われます。ユーザーから別のリクエストを取得する必要があります。このリクエストはどうすればよいですか?ユーザーがコーシャかどうかを確認するにはどうすればよいですか? また、上記の手順 (2) のトークンを改ざんしていないこと。
4

1 に答える 1

5

私も最近、同じような痛みを経験しました。私はこれに関して完全な初心者であり、これらすべてを理解するのにかなり苦労しました。Dominick Baier の Pluralsight Courses は、これらの概念を理解するのに非常に役立ちます。

今、あなたの質問に来ます。

MVC コントローラー アクションを取得しました。ここでユーザーに、使用できる ID プロバイダー (IP) と、それぞれの URL と、以下の手順 (3) で検証されるトークンの生成を伝えたいと思います。C# コードでこれを行うにはどうすればよいですか?

あなたの側でログインページを作成するためのこのブログ投稿を見てください: https://www.simple-talk.com/cloud/development/creating-a-custom-login-page-for-federated-authentication-with -windows-azure-acs/

クライアント、ACS、IP のビジネスが完了したら、それが何であるかは気にしません。私が懸念している限り、それらはすべてクライアント、ACS、および IP の間で行われます。ユーザーから別のリクエストを取得する必要があります。このリクエストはどうすればよいですか?ユーザーがコーシャかどうかを確認するにはどうすればよいですか? また、上記の手順 (2) のトークンを改ざんしていないこと。

ここで特別なことをする必要はないと思います。ASP.Net パイプラインは、 のIsAuthenticatedプロパティPrincipalを true に設定することで処理します。現在のコードは次のようになります (ほとんどは上記のブログ投稿から取得したものです)。私の場合、アプリケーション全体が保護されており、デフォルトでユーザーはホームページにアクセスします。ユーザーが認証されているかどうかを確認します。認証されていない場合は、ACS で構成されているすべての ID プロバイダーを表示し、ユーザーはそれらのいずれかを使用してログインできます。認証が成功すると、ACS はユーザを同じページに送り返し、今度はユーザが認証されます。私のコードでは、ユーザーが認証されている場合にアプリケーションに必要な一連のクレーム変換を行います。

コントローラ

public ActionResult Index()
        {
            if (!ClaimsPrincipal.Current.Identity.IsAuthenticated)
            {
                var idpsUrl = "IdentityProvidersUrl Taken from ACS Login Page";
                var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8,
                };
                var jsonList = webClient.DownloadString(idpsUrl);
                var acsResult = JsonConvert.DeserializeObject<List<IdentityProvider>>(jsonList);
                return View(acsResult);
            }
            else
            {
                var principal = ClaimsPrincipal.Current;
                var claims = principal.Claims;
                //If any claims transformation needs to be done, that can be done here.
            }
        }

意見

@{
    ViewBag.Title = "Index";
}


<h2>Index</h2>

    @foreach (var p in Model)
    {
        <p>
            <a href="@p.LoginUrl">@p.ToString()</a>
        </p>
    }

モデル

public class IdentityProvider
{
    public List<string> EmailAddressSuffixes { get; set; }
    public string ImageUrl { get; set; }
    public string LoginUrl { get; set; }
    public string LogoutUrl { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return Name;
    }
}
于 2013-06-13T04:51:34.360 に答える