- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已从 Azure 移动服务迁移到新的应用服务移动应用,并且在客户端使用新的 AMS 2.0.0-beta。
我(当前)有两个为 OAuth 2.0 实现的提供商:Google 和 Twitter。
以前,我能够通过服务器上主体中的声明获取提供者 token ,并且会有一个 uid(唯一 ID)声明,该声明可以是“Google:123456789”或“Twitter:123456789010”(或许多字母数字)。我相信 MobileServiceClient.UserId 也暴露了这一点。
现在,在我迁移到新的应用程序服务移动应用程序后(我现在正在使用预览门户,这在很大程度上非常棒),不再有 uid 声明,而是一个单一的sid( session ID)声明,类似于:“sid:ABCDEFGHIJKLMNOPQRSTUVWXYZ”,无论我使用哪个提供商登录。当我在客户端查看 MobileServiceClient.UserId 值时,它也给出了这个“sid”值。
重点是,以前 uid token 可以唯一标识用户。现在,对于所有提供商的所有用户来说都是一样的!
如何通过应用服务移动应用获取之前通过 Azure 移动服务获取的提供商 token ?
另外,有人可以向我指出 Azure 移动服务 2.0.0-beta 的源代码吗?它是开源的吗?我在 GitHub 上似乎找不到它。
编辑:这是服务器端用户的屏幕截图:
最佳答案
好的,重新阅读 migration documentation 后我无数次重新审视我之前的步骤之一,发现它有一个无效的假设。在文档中,它提到了身份验证的注意事项,包括以下代码块:
ServiceUser user = (ServiceUser) this.User;
FacebookCredentials creds = (await user.GetIdentitiesAsync()).OfType< FacebookCredentials >().FirstOrDefault();
string mobileServicesUserId = creds.Provider + ":" + creds.UserId;
现在,我无法找到“GetIdentitiesAsync”,并且 ServiceUser 有一个 Identities 可枚举属性,所以我就这么做了。 (毕竟,它提供了与 ServiceUser 的迁移前版本非常相似的信息。)但是,此方法显然获取的数据多于 Identities 枚举中已存在的数据。
我仍然找不到 GetIdentitiesAsync
,但在类浏览器中进行一番挖掘后,我找到了名为 GetIdentityAsync
的扩展方法的单一版本在 Microsoft.Azure.Mobile.Server.AppService.ServiceUserExtensions
中(这是唯一的方法)。我跟踪到了 Microsoft.Azure.Mobile.Server.AppService
命名空间,添加了一条 using 语句并尝试了以下代码:
var hmm2 = await serviceUser.GetIdentityAsync<GoogleCredentials>();
我保留名为“hmm2”的变量,因为我有以下屏幕截图:
右侧带有数字的绿色框是我在迁移之前获得的唯一标识符!因此,要获取 uid,需要针对所有提供者凭据调用此扩展方法。找到非空凭据后,它可以使用 nameidentifier
声明来获取提供商的用户唯一标识符。
我希望一旦应用程序服务准备好投入生产,我们就有一种更简洁的方法来获取非空提供者凭据,但目前这是可行的!
编辑:这是我现在在服务器端运行的代码(客户端 MobileServiceClient.UserId 不起作用。您必须从服务器返回信息):
var serviceUser = (Microsoft.Azure.Mobile.Server.Security.ServiceUser)Thread.CurrentPrincipal;
try
{
var googleCreds = await serviceUser.GetIdentityAsync<GoogleCredentials>();
if (googleCreds != null && googleCreds.Claims != null)
{
_CurrentProvider = "Google";
var nameClaim = googleCreds.Claims.Single(x => x.Key.Contains("nameidentifier"));
_CurrentProviderKey = nameClaim.Value;
return;
}
var twitterCreds = await serviceUser.GetIdentityAsync<TwitterCredentials>();
if (twitterCreds != null && twitterCreds.Claims != null)
{
_CurrentProvider = "Twitter";
var nameClaim = twitterCreds.Claims.Single(x => x.Key.Contains("nameidentifier"));
_CurrentProviderKey = nameClaim.Value;
return;
}
throw new NotSupportedException("The OAuth Provider is not supported.");
}
catch (Exception ex)
{
throw new InvalidOperationException("There was an error updating the authentication provider. InnerException: " + ex, ex);
}
关于azure - 迁移到应用服务移动应用程序后进行身份验证 : uid vs sid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29836075/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!