Mam jakiś kod, który powinien działać w aplikacji konsoli i wykonuje inicjalizację dla użytkowników. Kod znajduje się w Dot Net Core 3.1 i muszę uzyskać wiadomość e-mail bieżącego użytkownika ze środowiska, aby wykonać zadanie. Jak mam to zrobić?

Z otoczenia widzę, że mogę uzyskać dostęp do nazwy użytkownika, ale jest to zasadniczo imię osoby.

Environment.UserName

Jakieś sugestie?

Zaktualizuj 1

Założeniem jest, że użytkownicy są zalogowani do systemu Windows / Mac z użytkownikiem Azure Active Directory i dlatego mają wszystkie niezbędne dane, które są tutaj e-mailem.

Zaktualizuj 2

az login jest pierwszą akcją przed uruchomieniem aplikacji. Czy możemy wziąć coś z tego tokena?

0
Ashkan Sirous 19 marzec 2020, 13:09

2 odpowiedzi

Najlepsza odpowiedź

Przedmowa: Ta odpowiedź zakłada znajomość OIDC, strukturę jwt i że znasz różnice i obowiązki access_token i id_token.

Ta odpowiedź jest oparta na tym blogu Post: HTTPS: // Mikhail.io/2019/07/how-azure-CI-Manages-access-tokens/.


Gdy użytkownik uruchamia az login i przepływ uwierzytelniania OIDC odniosą sukces, a Azure CLI (az) zapisze bieżący stan poświadczenia na dysku w ~/.azure/. Od 2020 marca, wykonywalna az nie próbuje zaszyfrować ani w inny sposób chronić swoje buforowane żetony OIDC z innych procesów użytkownika (na lepsze lub na gorsze) - w tym przypadku jest to dobra rzecz - pod warunkiem, że nie masz nic przeciwko złośliwe oprogramowanie łatwo nabbując swoje poświadczenia.

Adres e-mail użytkownika (przynajmniej ich adres e-mail powiązany z ich kontem AZUREAD) będzie wewnątrz ich tokenu tożsamości OIDC JWT ({x0}}) - nie wydaje się być buforowane przez {{x1} . access_token Dotacje do dostępu do zasobu profilu użytkownika w pierwszej kolejności).

Ale zakładając, że do masz dostęp do zasobu profilu użytkownika, adres e-mail użytkownika będzie W mieście email Właściwość roszczenia.

1
Dai 19 marzec 2020, 10:34

Nie można uzyskać bieżącego e-maila użytkownika systemów operacyjnych, ponieważ nie jest zdefiniowany.

Myślę, że odnoszę się do nazw użytkowników w stylu UPN, jak widać w systemach Windows Active Directory Domeny, które są formularza {userName}@{fqdn}, np. alice@corp.bob.com (gdzie corp.bob.com jest w pełni kwalifikowaną nazwą domeny Active Directory). UPN jest często, ale nie zawsze, adres e-mail użytkownika z powodu domyślnej konfiguracji serwera Microsoft Exchange.

... ale UPNS nie istnieją na platformach, które nie używają usługi Active Directory, takich jak systemy wbudowane i większość instalacji Linuksa. Musisz użyć biblioteki LDAP w System.EnterpriseServices, aby go spojrzeć (być może za pomocą ADSI).

0
Dai 19 marzec 2020, 10:13