Azure 身份验证 ID 不稳定

Posted

技术标签:

【中文标题】Azure 身份验证 ID 不稳定【英文标题】:Azure Authentication Id is not stable 【发布时间】:2020-01-25 00:01:21 【问题描述】:

我正在将 Azure 移动应用服务与 Xamarin Forms 一起使用。 在我的应用中,我使用在 azure 门户中配置的网络社交媒体身份验证(Facebook、Twitter、Google)。

我正在使用从 CurrentClient.Id 获得的 sid 以将其与我的 Easy Tables 中的用户进行匹配。但是,对于某些用户,使用相同的帐户和相同的提供商登录后,在我的数据库中找不到匹配项,因为 sid 不同!我 100% 确定它是以前用来登录的同一个帐户,但我得到了不同的 sid。这怎么可能?每次登录不应该保持不变吗?那么它的全部意义何在?

【问题讨论】:

澄清一下,您是否面临与此线程中讨论的相同问题 - ***.com/questions/59489783/…,如果是,您能否尝试此 URL 中提到的解决方法,让我们知道它是如何进行的。 嗨@AjayKumar-MSFT,我使用node.js 作为我的后端而不是C#。而且我在 node.js 中没有找到与之等效的东西。这个问题会影响我的整个应用程序,并且从一开始就不应该发生,并且解决方法是不可接受的,我需要一个可靠的解决方案,我可以信任我的用户。 【参考方案1】:

您正在为此使用 Azure 应用服务身份验证。您传递给服务的 JWT 中有一个可用的稳定 ID。您可以从 /.auth/me 端点轻松获取它(请参阅 https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#validate-tokens-from-providers )

当您 GET /.auth/me 并将 X-ZUMO-AUTH 标头设置为登录返回的 authenticationToken 时,user.userId 字段将填充一个稳定的 ID。因此,下一个问题是“如何在 Node.js 后端添加/比较它?”幸运的是,HOW-TO FAQ for Node.js 明确回答了这个问题。简短的版本是,使用context.user.getIdentity()(一种异步方法)来获取身份,然后用它做一些事情:

function queryContextFromUserId(context) 
  return context.user.getIdentity().then((data) => 
    context.query.where( id: data.userId );
    return context.execute();
  );


function addUserIdToContext(context) 
  return context.user.getIdentity().then((data) => 
    context.itme.id = data.userId;
    return context.execute();
  );


table.read(queryContextFromUserId);
table.insert(addYserIdToContext);
table.update(queryContextFromUserId);
table.delete(queryContextFromUserId);

这里真正的问题是“数据块中有什么?”它是一个包含“带有 X-ZUMO-AUTH 标头的 /.auth/me 端点产生的任何东西”的对象,这取决于提供者。

解决这个问题的机制。

    调试您的客户端应用程序 - 登录完成后,检查 CurrentUser 的客户端对象并获取当前令牌 使用 Fiddler、Insomnia 或 Postman 获取 .../.auth/me,并将 X-ZUMO-AUTH 标头设置为当前令牌 重复您必须使用的每种身份验证方法,以确保您拥有每种方法的格式。

您现在可以在后端使用这些。

【讨论】:

以上是关于Azure 身份验证 ID 不稳定的主要内容,如果未能解决你的问题,请参考以下文章

Azure ML 操作:工作区身份验证错误

部署到 Azure 时,Google 身份验证不起作用

使用 id_token 对受广告保护的应用进行身份验证

azure 应用服务身份验证令牌验证

如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

api 的 Azure Apim 身份验证