c# - 如何在 dotnet core 3 控制台应用程序中获取登录用户的电子邮件?
问题描述
我有一些代码应该在控制台应用程序中运行并为用户进行一些初始化。代码在 dot net core 3.1 中,我需要从环境中取出当前用户的电子邮件来完成任务。我该怎么做?
从环境中我看到我可以访问用户名,但这基本上是人名。
Environment.UserName
有什么建议么?
更新 1
假设用户使用他们的 Azure Active Directory 用户登录到 Windows/Mac,因此拥有所有必要的数据,这些数据是这里的电子邮件。
更新 2
这az login
是运行应用程序之前的第一个操作。我们可以从那个令牌中取出任何东西吗?
解决方案
前言:此答案假设您熟悉 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
声明属性中。
推荐阅读
- r - 如何索引来自 S4 对象的信息
- c# - 在 C# 中使用 Google 登录网页和 API OAuth2
- java - 在 Java 中重定向到具有 404 状态代码的 URL
- java - Selenium chromedriver 禁用日志记录或将其重定向 java
- security - 安全使用 rsocket 的最佳实践是什么?
- html - 如何从通配符路由重定向到主页?
- python - 两个日期列之间的 np.busday_count 给出 -1 作为每一行的结果
- c - C中大尺寸数组声明的问题
- python - 带有连接的 Groupby agg 不会产生预期的输出
- java - 在 Java 中创建数字网格