首页 > 解决方案 > 如何在 dotnet core 3 控制台应用程序中获取登录用户的电子邮件?

问题描述

我有一些代码应该在控制台应用程序中运行并为用户进行一些初始化。代码在 dot net core 3.1 中,我需要从环境中取出当前用户的电子邮件来完成任务。我该怎么做?

从环境中我看到我可以访问用户名,但这基本上是人名。

Environment.UserName

有什么建议么?

更新 1

假设用户使用他们的 Azure Active Directory 用户登录到 Windows/Mac,因此拥有所有必要的数据,这些数据是这里的电子邮件。

更新 2

az login 是运行应用程序之前的第一个操作。我们可以从那个令牌中取出任何东西吗?

标签: c#.net-core

解决方案


前言:此答案假设您熟悉 OIDC、JWT 的结构,并且您知道 和 的区别和access_token职责id_token

此答案基于此博客文章:https ://mikhail.io/2019/07/how-azure-cli-manages-access-tokens/


当用户运行az login并且 OIDC 身份验证流程成功时,Azure CLI ( az) 会将当前凭据状态保存到磁盘 at ~/.azure/。截至 2020 年 3 月,az可执行文件不会尝试加密或以其他方式保护其缓存的 OIDC 令牌免受其他用户进程的影响(无论好坏)——在这种情况下,这是一件好事——只要你不介意恶意软件轻易窃取你的凭据.

用户的电子邮件地址(至少,与他们的 AzureAD 帐户关联的电子邮件地址)将在他们的 OIDC 身份令牌 JWT ( id_token) 中 - 这似乎没有被缓存,az login因此您需要使用 OIDC客户端使用access_token从文件中提取的明文从 AzureAD 的 OIDC 服务~/.azure/accessTokens.json请求 OIDC userinfo(用户配置文件资源)(假设首先access_token授予您访问用户配置文件资源的权限)。

但假设您确实有权访问用户配置文件资源,则用户的电子邮件地址将位于email声明属性中。


推荐阅读