DotNetOpenAuth和X-XRDS-Location标头

时间:2012-01-26 11:05:39

标签: dotnetopenauth

我正在玩DotNetOpenAuth示例,试图了解如何正确地与OpenID集成。其中一个样本称为OpenIdRelyingPartyMvc。它有两个代码部分,我不确定它们如何影响功能。

  • 在Global.asax.cs中:

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = string.Empty });  // Parameter defaults
    
    routes.MapRoute(
        "Root",
        string.Empty,
        new { controller = "Home", action = "Index", id = string.Empty });
    

如果我删除映射“Route”的最后一行,似乎没有任何影响:映射“Default”似乎就足够了。为什么有“路线”路线?

  • 在HomeController.cs

    public class HomeController : Controller {
        public ActionResult Index() {
            Response.AppendHeader(
                "X-XRDS-Location",
                new Uri(Request.Url, 
                    Response.ApplyAppPathModifier("~/Home/xrds")).AbsoluteUri);
            return View("Index");
        }
    
        public ActionResult Xrds()
        {
            return View("Xrds");
        }
    }
    

如果我删除“AppendHeader”调用并测试样本,它仍然有效!我知道这个标题已经足够了,我只是不能让示例应用程序依赖它:它可以在没有设置的情况下工作。如果我在Xrds方法中设置断点,则永远不会触发它。

1 个答案:

答案 0 :(得分:3)

global.asax.cs中的路由可能是多余的。

您要删除的X-XRDS-Location标题对于OpenID流并非绝对必要,但如果您在没有注销的情况下发布您的依赖方应用程序Yahoo! and other OpenID Providers may warn the user that your site is not legit

您可以通过运行OpenIdProviderWebForms示例并使用该示例OP中的标识符登录RP来本地测试(因此观察正在执行的Home / Xrds操作)。在登录期间,OP将查询RP的XRDS,并在要求您确认登录的网页上,它将指示“RP验证”是成功还是失败。如果成功了,你应该好好去。