我有一个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),请将其删除(如文档中所示)。
此致敬意
徐明.