Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用声明的标识符检索身份验证提供程序类型_C#_Asp.net_Asp.net Mvc_Openid_Dotnetopenauth - Fatal编程技术网

C# 使用声明的标识符检索身份验证提供程序类型

C# 使用声明的标识符检索身份验证提供程序类型,c#,asp.net,asp.net-mvc,openid,dotnetopenauth,C#,Asp.net,Asp.net Mvc,Openid,Dotnetopenauth,我已经浏览了DotNetOpenAuth上的文档,找不到基于ClaimedIdentifier检索身份验证提供程序类型的方法。我正在寻找一种类似于以下的方法: ProviderType providerType = ClaimedIdentifier.Parse(" .... ").Type; 是否有检索提供程序类型的方法 最好通过查询DotNetOpenAuth来检索此信息,而不是在应用程序中维护状态变量或将类型作为查询字符串参数传递。虽然,看起来这可能是必要的…我试图找到类似的东西,用来识

我已经浏览了DotNetOpenAuth上的文档,找不到基于
ClaimedIdentifier
检索身份验证提供程序类型的方法。我正在寻找一种类似于以下的方法:

ProviderType providerType = ClaimedIdentifier.Parse(" .... ").Type;
是否有检索提供程序类型的方法


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

我试图找到类似的东西,用来识别返回的提供者,但到目前为止,我刚刚开始为yahoo做类似的事情,response.provider.Uri.ToString().Contains(“yahoo”)。如果有更好的方法会有所帮助,这似乎有些俗气,但这是我现在唯一可以使用的方法。

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

您可以从
IAAuthenticationRequest
的实例中获取ClaimedIdentifier。此接口还具有一个
提供程序
属性,该属性返回一个
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();
    }
}

我希望这能有所帮助。

什么是“提供者类型”?这不是OpenID规范定义的术语。我想要的是一个方法,它可以给我一个“提供者名称”(即Google、Yahoo等),给我一个ClaimedIdentifier
string
+1 Right,谢谢你花时间创建这个API!这就是我目前正在采取的方法。尽管如此,我认为这种类型的检查应该更多地关注API,而不是客户机代码(管理URI&它们将来可能改变的潜力)。如果我在代码中执行该检查,API和客户端代码可能会“不同步”。如果我可以调用属性/方法来检索提供程序的“友好名称”,那就太好了。如果提供程序的URI发生更改,我只需要更新到最新版本的DotNetOpenAuth…或者,DotNetOpenAuth是否完全不知道提供程序,并且只负责执行OpenAuth请求/响应?在这种情况下,管理提供者URI的责任将是客户端的责任?对。DotNetOpenAuth严格来说是一个协议库。它没有任何提供者或EPs的特殊字符串。但我怀疑谷歌会改变他们的URI,因为很多人都在做你现在正在做的事情。请原谅我的无知,什么是“EP”?哎呀。这对你来说是自动更正。EP应该是RP=依赖方