Alw*_*wyn 2 asp.net asp.net-mvc azure acs asp.net-mvc-3
我正在看几个使用ACS的例子,他们确实让我感到愚蠢.
我在网上查看了教程,似乎我需要的是配置中的以下行:
httpRuntime requestValidationMode="2.0"
Run Code Online (Sandbox Code Playgroud)
但是此示例项目 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;
}
Run Code Online (Sandbox Code Playgroud)
并在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",
Run Code Online (Sandbox Code Playgroud)
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)中的令牌.
我认为你不需要在这里做任何特别的事情.ASP.Net管道通过将IsAuthenticated属性设置Principal为true来为您处理它.这是我的代码目前的样子(主要来自上面的博客文章).对我来说,整个应用程序都受到保护,默认情况下用户登陆主页.我检查用户是否经过身份验证.如果他们未经过身份验证,我会向他们展示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.
}
}
Run Code Online (Sandbox Code Playgroud)
视图
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var p in Model)
{
<p>
<a href="@p.LoginUrl">@p.ToString()</a>
</p>
}
Run Code Online (Sandbox Code Playgroud)
模型
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |