- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
像this这样的问题还挺多的和 this所有声明都声称 ClaimedIdentifier
应该用于唯一标识每个用户。
成功登录后,我将 ClaimedIndentifier
存储在数据库中。每当用户登录时,我都会遍历我的记录以查找 ClaimedIdentifier
。但是我注意到 ClaimedIdentifiers
正在改变。我应该在数据库中存储什么来识别我的用户。我正在使用 Google
帐户。这就是我检索将其存储到数据库中的方式
OpenIdRelyingParty rp = new OpenIdRelyingParty();
IAuthenticationResponse r = rp.GetResponse();
UserController.addUser(new UserController.User(r.ClaimedIdentifier.ToString(), 0));
最佳答案
这不是 DotNetOpenAuth 独有的问题。这是谷歌的行为。 Google 的 OpenID 提供商发布所谓的成对唯一标识符。只要您的 OpenID 领域不变,它们对于给定用户将始终相同。
如果您在没有明确向 DotNetOpenAuth 的 OpenIdRelyingParty.CreateRequest
方法提供领域的情况下登录用户,DotNetOpenAuth 仅使用当前的 Web 应用程序根 URL。这是一个合理的默认设置,但如果您的网站可以通过多种方式访问(例如 http 和 https,或者有和没有 www. 主机名),那么默认域将根据用户碰巧使用的 URL 而有所不同到达您的登录页面。当领域发生变化时,Google 生成的声明标识符也会发生变化。
然后,解决方法是选择一个 领域(如果可以的话,最好选择具有 https 方案的领域)并将其显式提供给 CreateRequest
方法。您还必须确保同一方法的 return_to 参数与您选择的领域共享一个公共(public)根。例如,如果您选择的领域是: https://www.mysite.com/然后你必须确保你的 return_to 是基于那个的。就像是: https://www.mysite.com/login.aspx
如果用户浏览到http://mysite.com/login.aspx ,那将是 return_to 的默认 URL,它与您选择的领域不匹配。
总的来说,它可能看起来像这样:
var request = relyingParty.CreateRequest(
"https://www.google.com/accounts/o8/id",
"https://www.mysite.com/",
new Uri("https://www.mysite.com/login.aspx"));
请注意,您的 return_to 不需要每个请求都需要与领域完全相同。因此,您可以有多个登录页面 URL,每个登录页面 URL 都将其自己的 URL 指定为 return_to 参数。但是所有 return_to URL 都必须基于领域 URL。
随着该更改始终应用于您允许用户登录的所有位置,您应该会看到来自 google 的一致声明的标识符。不幸的是,您已经使用其他领域获得的声明标识符与您在此修复后获得的标识符不匹配。如果您需要合并这些用户帐户,并且您有用户的电子邮件地址,您可以尝试基于此进行合并。但要非常注意这一步。只有当您确定您存档的电子邮件地址属于这些用户时,才能安全地完成此操作。如果您在用户登录时通过 OpenID 获得了这些电子邮件地址,并仔细检查它来自您信任的 OpenID 提供商并验证了电子邮件,那么您可能没问题。请注意,仅将 Google OP 标识符硬编码到 CreateRequest
中不能保证只有 Google 用户登录。为确保这一点,您必须检查当肯定断言出现时,IAuthenticationResponse.Provider.Uri
属性匹配 https://www.google.com/accounts/o8/ud
。
关于c# - DotNetOpenAuth ClaimedIdentifier 更改?我应该在数据库中存储什么来识别用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617078/
您好, 我想将 ClaimedIdentifier 保存在数据库中。 它可以持续多久? 大概 255 个字符可以吗? 最佳答案 openid.claimed_id 仅受 URL 的最大长度限制,从技术
像this这样的问题还挺多的和 this所有声明都声称 ClaimedIdentifier 应该用于唯一标识每个用户。 成功登录后,我将 ClaimedIndentifier 存储在数据库中。每当用户
我只是在阅读这篇文章,阅读如何将 OpenID 与 Asp.Net 结合使用: Tutorial Link 我想知道什么是 Claimed Identifier(它的基础是什么)以及为什么作者在 中使
如果我有 ClaimedIdentifier 是使用 dotNetOpenId 获取FriendlyIdentifierForDisplay 的方法吗? 谢谢 最佳答案 没有。 FriendlyIde
我目前正在从 Janrain engange (rpxnow) 切换到 dotnetopenauth。在我的数据库中,我将用户声明的标识符存储在表单中 https://www.google.com/a
我是一名优秀的程序员,十分优秀!