簡體   English   中英

在C#中設置Azure ACS

[英]Azure ACS Set Up in C#

我正在看幾個使用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",

HUH !?

看起來我能得到一些簡單的(白痴證明)的指針嗎?

  1. 我是一個依賴方
  2. 我有一個MVC 控制器動作 ,我想告訴用戶這里是他們可以使用的身份提供者(IP),以及它們各自的URL以及生成將在下面的步驟(3)中進行驗證的令牌。 如何在C#代碼中做到這一點?
  3. 客戶端,ACS,IP一旦完成了他們的業務,我不在乎那是什么,就我所關心的所有這些都在客戶端,ACS和IP之間。 我應該從用戶那里得到另一個請求。 我如何處理此請求? 如何驗證用戶是否是猶太潔食者? 並且他們沒有偽造上述步驟(2)中的令牌。

最近,我也經歷過類似的痛苦。 我是一個完全的新手,很難理解所有這些。 我發現Dominick Baier的Pluralsight課程對理解這些概念非常有用。

現在來問你的問題。

我有一個MVC控制器動作,我想告訴用戶這里是他們可以使用的身份提供者(IP),以及它們各自的URL以及生成將在下面的步驟(3)中進行驗證的令牌。 如何在C#代碼中做到這一點?

請查看此博客文章,以在您的末端創建登錄頁面: https : //www.simple-talk.com/cloud/development/creating-a-custom-login-page-for-federated-authentication-with -Windows-天青-ACS /

客戶端,ACS,IP一旦完成了他們的業務,我不在乎那是什么,就我所關心的所有這些都在客戶端,ACS和IP之間。 我應該從用戶那里得到另一個請求。 我如何處理此請求? 如何驗證用戶是否是猶太潔食者? 並且他們沒有偽造上述步驟(2)中的令牌。

我認為您不需要在這里做任何特別的事情。 通過將PrincipalIsAuthenticated屬性設置為true,ASP.Net管道可以為您解決此IsAuthenticated 這是我的代碼當前的樣子(大部分取自上面的博客文章)。 對我來說,整個應用程序都受到保護,默認情況下,用戶登錄到主頁。 我檢查用戶是否已通過身份驗證。 如果未通過身份驗證,則向他們顯示ACS中配置的所有身份提供程序,用戶可以使用其中任何一個進行登錄。 身份驗證成功后,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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM