[英]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 !?
看起來我能得到一些簡單的(白痴證明)的指針嗎?
最近,我也經歷過類似的痛苦。 我是一個完全的新手,很難理解所有這些。 我發現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)中的令牌。
我認為您不需要在這里做任何特別的事情。 通過將Principal
的IsAuthenticated
屬性設置為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.