我在我的网络应用程序中使用azure Access Control System (ACS)
来验证来自不同身份提供商的用户。我成功注册了我的应用程序以使用ACS。现在我通过从web.config文件中删除以下内容来删除我对ACS的完整网站安全性:
<authorization>
<deny users="?" />
</authorization>
删除后,我的用户无需登录即可访问我的网站主页。现在,在我的主页上,我设置了一个链接SignIn
。 我想知道当用户点击SignIn链接时如何将我的用户重定向到ACS默认登录页面?(类似当asp.net应用程序将用户重定向到ACS登录页面时如果用户不是经过身份验证并尝试访问由授权属性)
答案 0 :(得分:1)
您可以使用SignInRequestMessage类手动构建URL,也可以调用
FederatedAuthentication.WSFederationAuthenticationModule.RedirectToIdentityProvider()(IIRC)。
答案 1 :(得分:1)
以下代码会将您重定向到联合帐户登录页面:
public class AccountController : Controller
{
public ActionResult SignIn(string returnUrl)
{
if (String.IsNullOrEmpty(returnUrl))
{
returnUrl = Url.Content("~/");
}
var signInRequest = FederatedAuthentication.WSFederationAuthenticationModule.CreateSignInRequest(
"passive",
returnUrl,
FederatedAuthentication.WSFederationAuthenticationModule.PersistentCookiesOnPassiveRedirects);
return Redirect(signInRequest.RequestUrl);
}
// SignOut, SignOutCallback below from typical MVC template
}
答案 2 :(得分:0)
此外 - 我相信WIF包含control,会显示该登录链接
答案 3 :(得分:0)
以下是我在MVC应用程序中的完成方式。
允许用户在web.cofig中使用此声明访问所有未受保护的页面:
<location path="FederationMetadata">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
在我的登录方法上使用RequireHttps属性:
[HttpGet]
[RequireHttps]
public ActionResult LogOn(string returnUrl)
{
if (string.IsNullOrWhiteSpace(returnUrl))
returnUrl = "/reports";
return LogOnCommon(returnUrl);
}
并使用web.config的身份验证部分,其中我的登录页面为:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/account/logon" timeout="2880" />
</authentication>
</system.web>