Как получить электронную почту зарегистрированного пользователя в консольном приложении do tnet core 3? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть некоторый код, который должен работать в консольном приложении и выполнять некоторую инициализацию для пользователей. Код находится в dot net core 3.1, и мне нужно вывести электронную почту текущего пользователя из среды, чтобы выполнить задачу. Как мне это сделать?

Из среды я вижу, что могу получить доступ к имени пользователя, но это, в основном, имя человека.

Environment.UserName

Есть предложения?

Обновление 1

Предполагается, что пользователи вошли в Windows / Ma c со своим Azure пользователем Active Directory и, следовательно, имеют все необходимые данные, которые можно отправить по электронной почте.

Обновление 2

az login - это первое действие перед запуском приложения. Можем ли мы взять что-нибудь из этого токена?

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Предисловие: Этот ответ предполагает знакомство с OID C, структурой JWT и тем, что вы знаете различия и обязанности access_token и id_token.

Этот ответ основан на этом сообщение в блоге: https://mikhail.io/2019/07/how-azure-cli-manages-access-tokens/


Когда пользователь запускает az login и поток аутентификации OID C успешен, тогда CLI Azure (az) сохранит текущее состояние учетных данных на диск в ~/.azure/. По состоянию на март 2020 года исполняемый файл az не пытается зашифровать или иным образом защитить свои кэшированные токены OID C от других пользовательских процессов (к лучшему или к худшему) - в этом случае это хорошо - при условии, что вы этого не сделаете Не забывайте, что вредоносное ПО легко захватывает ваши учетные данные.

Адрес электронной почты пользователя (по крайней мере, адрес электронной почты, связанный с его учетной записью AzureAD) будет находиться внутри его идентификатора OW C токена идентификации JWT (id_token) - это, похоже, не кэшируется az login, поэтому вам нужно будет использовать клиент OID C, чтобы использовать открытый текст access_token, извлеченный из файла ~/.azure/accessTokens.json, для запроса OID C userinfo (Ресурс профиля пользователя) из службы AzureAD OID C (при условии, что access_token предоставляет вам доступ в первую очередь к ресурсу профиля пользователя).

Но при условии, что у вас do есть доступ к ресурсу профиля пользователя адрес электронной почты пользователя будет в свойстве email претензии .

0 голосов
/ 19 марта 2020

Вы не можете получить электронную почту текущего пользователя операционной системы, потому что она не определена.

Я думаю, что вы ссылаетесь на имена пользователей в стиле UPN, как в Windows Домены Active Directory, которые имеют форма {userName}@{fqdn}, например alice@corp.bob.com (где corp.bob.com - полное доменное имя Active Directory). UPN часто, но не всегда, является адресом электронной почты пользователя из-за конфигурации по умолчанию Microsoft Exchange Server.

... но UPN не существует на платформах, которые не используют Active Directory, таких как встроенные системы и большинство Linux установок. Вам нужно использовать библиотеку LDAP в System.EnterpriseServices, чтобы найти ее (возможно, с использованием ADSI).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...