0

我有一个 MVC 3 应用程序,我正在尝试与 Azure 托管的 ACS 身份提供程序集成。我一直在关注教程,但在使用 ASP.NET MVC 时它们似乎对我不起作用。

本质上,当我点击我用用户标记的View[Authorize]时,会重定向到 Azure 托管的登录页面,其中包含Identity Providers列表。我选择了一个提供商(在本例中为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 都是最新的。

4

2 回答 2

0

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

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

此致,

明旭。

于 2012-07-03T10:36:46.533 回答
-1

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

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

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

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

此致,

明旭。

于 2012-07-05T09:22:52.440 回答