3

Access Control System (ACS)在我的 Web 应用程序中使用 azure 对来自不同身份提供者的用户进行身份验证。我成功注册了我的应用程序以使用 ACS。现在我通过从 web.config 文件中删除以下内容来删除我的 ACS 完整网站安全性:

<authorization>
  <deny users="?" />
</authorization>

删除后,我的用户无需登录即可访问我的网站主页。现在在我的主页上我设置了一个链接SignIn我想知道当用户单击登录链接时如何将我的用户重定向到 ACS 默认登录页面?类似地,当 asp.net 应用程序将用户重定向到 ACS 登录页面时,如果用户未通过身份验证并尝试访问由 Authorize 属性修饰的控制器

4

4 回答 4

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
}
于 2013-12-15T23:52:53.350 回答
1

您可以使用 SignInRequestMessage 类手动构建 URL,也可以调用

FederatedAuthentication.WSFederationAuthenticationModule.RedirectToIdentityProvider() (IIRC)。

于 2013-01-25T13:58:35.750 回答
0

另外 - 我相信 WIF 包含一个控件,它将为您显示该登录链接

于 2013-01-25T14:45:50.647 回答
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>
于 2013-01-25T22:33:54.013 回答