0

我浏览了DotNetOpenAuth上的文档,找不到基于ClaimedIdentifier. 我正在寻找类似于以下的方法:

ProviderType providerType = ClaimedIdentifier.Parse(" .... ").Type;

有没有检索提供者类型的方法?

最好查询 DotNetOpenAuth 来检索此信息,而不是在应用程序中维护状态变量或将类型作为查询字符串参数传递。不过,看起来这可能是必要的......

4

2 回答 2

1

我试图找到类似的东西,以确定返回的提供程序,但到目前为止,我刚刚开始为雅虎做类似的事情,response.Provider.Uri.ToString().Contains("yahoo")。如果有更好的东西会有所帮助,这似乎很俗气,但这是我现在唯一可以使用的东西。

于 2013-01-02T16:19:45.083 回答
1

不要解析声明的标识符来试图找出提供者。虽然这可能适用于常见情况,但在某些有效情况下会失败,您也可能会为攻击敞开心扉。

您从 的实例中获取 ClaimedIdentifier IAuthenticationRequest。这个接口还有一个Provider属性,它返回一个IProviderEndpoint带有Uri属性的实例。这个 Uri 属性是您应该如何识别您特别感兴趣的提供者。例如:

public void Login(string userSuppliedIdentiifer, OpenIdRelyingParty rp) {
    IAuthenticationRequest request = rp.CreateRequest(userSuppliedIdentifier;
    if (request != null) {
        if (request.Provider.Uri == new Uri("https://www.google.com/o8/ud")) {
            // It's Google!
        } else if (request.Provider.Uri == new Uri("https://me.yahoo.com/whatever-it-is")) {
            // It's Yahoo!
        }

        request.RedirectToProvider();
    }
}

我希望这有帮助。

于 2013-01-15T06:21:10.067 回答