我正在使用dotnetopenauth,我想知道我应该从claimIdentifier存储什么。我认为这只是一个id,但似乎也有一个网址。
当我做
之类的事情时Identifier claimedIdentifier = openIdRelayingParty.ClaimedIdentifier;
我得到了
//雅虎
https://me.yahoo.com/a/2RCv_bQ7341PA3v4irf5tzu_9K_fF1414afa414
https://www.google.com/accounts/o8/id?id=AItOawmMvmoomT7lOO5jwEaAd1414dfafaf241VUI
所以我要存储整件事还是只存储长字符串?如果我应该存储长字符串,那么如何将其提取出来?似乎每个提供程序格式都有点不同。
答案 0 :(得分:3)
您应该存储整个网址,包括片段部分。片段部分是某些URL末尾的#fragment。例如,我认为每个Yahoo ClaimedIdentifier实际上都包含这样一个片段:
https://me.yahoo.com/a/2RCv_bQ7341PA3v4irf5tzu_9K_fF1414afa414#aHd88
存储整个 ClaimedIdentifier非常重要,后来用于识别同一个人。另外,请确保您的身份检查为case sensitive。 不使用System.Uri.Equals
方法验证两个ClaimedIds是否相同。如果只有#fragment不同,不正确,它会返回true
。您应该使用Identifier.Equals
或简单的String.Equals(string, string, StringComparison.Ordinal)
方法。
或者,如果您从数据库中的users表中查找用户,请确保您的users表配置为对ClaimedId列区分大小写。