我已经浏览了DotNetOpenAuth上的文档,无法找到基于ClaimedIdentifier
检索身份验证提供者类型的方法。我正在寻找一个类似于以下方法:
ProviderType providerType = ClaimedIdentifier.Parse(" .... ").Type;
是否有方法来检索提供程序类型?
最好查询DotNetOpenAuth来检索这些信息,而不是在应用程序中维护状态变量或将类型作为查询字符串参数传递。虽然,看起来这可能是必要的…
不要解析声明的标识符来试图找出提供者。虽然这可能适用于一般情况,但在某些有效情况下,这可能会失败,并且您也可能会使自己受到攻击。
您从IAuthenticationRequest
的实例中获取ClaimedIdentifier。这个接口还有一个Provider
属性,它返回一个带有Uri
属性的IProviderEndpoint
实例。这个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();
}
}
我试图找到类似的东西,一些东西来识别正在返回的提供者,但到目前为止,我只是做了这样的事情,response.Provider.Uri.ToString(). contains ("yahoo"),为yahoo。如果有更好的东西会有所帮助,这似乎很俗气,但这是我现在唯一能做的事情。