无法在 MVC 应用程序中完成 Azure ACS 身份验证



我有一个MVC 3应用程序,我正在尝试将其与Azure托管的ACS标识提供者集成。我一直在遵循教程,但在使用 MVC 时它们似乎 ASP.NET 对我不起作用。

从本质上讲,当我点击我标记的视图[Authorize]用户将被重定向到包含标识提供者列表的 Azure 托管登录页面。我选择一个提供商(在本例中为 Live)并登录。在这一点上,这一切都如我预期的那样工作。成功进行身份验证后,(直观地)显示我不会重定向回我的应用程序,而是返回到"标识提供者"页。在 Fiddler 中观看此内容时,它似乎实际上返回,但随后又重新开始循环(HTTP 状态代码 302)。

有人可以解释一下可能导致这种情况的原因吗?

在 Azure 门户中,我为信赖方应用程序配置了以下 URL

    领域: http://
  • localhost:7777/
  • 返回网址: http://localhost:7777/
  • 我也尝试了 http://localhost:7777/Home/About
  • 在所有其他情况下,我都有默认设置

URL 与 Web.config 中的内容匹配(包括尾部斜杠

只有一个控制器具有以下功能:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    [Authorize]
    public ActionResult About()
    {
        Response.Write("Claims Received from ACS:");
        ClaimsIdentity ci = Thread.CurrentPrincipal.Identity as ClaimsIdentity; foreach (Claim c in ci.Claims)
        {
            Response.Write("Type: " + c.ClaimType + "- Value: " + c.Value + "");
        }
        return View();
    }
}

注意:这是一个全新的项目,旨在通过此集成工作。所有包和相关 SDK 都是最新的。

想知道你的意思是,当你登录并返回你的 Web 应用程序时,它会认为你没有登录,并再次将你重定向到身份提供者的登录页面。

请检查是否正确配置了授权逻辑。例如,如果使用基于角色的授权,则需要配置 ACS 以创建返回角色的规则。还可以使用自定义授权代替"授权"属性。在自定义授权代码中,可以检查所需的声明是否存在。声明可以是角色或其他任何内容(用户名、年龄等)。自定义授权通常比授权属性更灵活。

此致敬意

徐明.

请确保您没有修改示例代码。由于它是官方的ACS SDK示例,因此很多人都尝试过并且它将起作用。

同样在您的原始帖子中,您提到您已经配置了 ASP.NET 授权:

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

如果您不想使用 ASP.NET 授权(您想使用 WIF),请将其删除(如文档中所示)。

此致敬意

徐明.

最新更新