我最近也经历过类似的痛苦。我对此完全是新手,很难理解这一切。我发现多米尼克·拜尔 (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-azure-acs/
一旦客户、ACS、IP 完成了他们的业务,我不在乎
那是什么,就我而言,所有这些都是客户之间的,
ACS 和 IP。我应该收到用户的另一个请求。我该怎么办
处理这个请求吗?如何验证用户是否犹太洁食?然后
他们没有伪造上述步骤 (2) 中的令牌。
我认为您不需要在这里做任何特别的事情。 ASP.Net 管道通过设置IsAuthenticated
的财产Principal
为真。这是我的代码当前的样子(主要取自上面的博客文章)。对我来说,整个应用程序都受到保护,默认情况下用户会登录主页。我检查用户是否经过身份验证。如果他们未经过身份验证,我会向他们显示 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.
}
}
View
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var p in Model)
{
<p>
<a href="@p.LoginUrl">@p.ToString()</a>
</p>
}
Model
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;
}
}