Ενσωμάτωση χρηστών στο ASP.NET Core χρησιμοποιώντας το Azure AD Temporary Access Pass και το Microsoft Graph

3
Ενσωμάτωση χρηστών στο ASP.NET Core χρησιμοποιώντας το Azure AD Temporary Access Pass και το Microsoft Graph

Το άρθρο εξετάζει την ενσωμάτωση διαφορετικών χρηστών του Azure AD με ένα προσωρινό πάσο πρόσβασης (TAP) και κάποιο είδος ελέγχου ταυτότητας χωρίς κωδικό πρόσβασης. Μια εφαρμογή ASP.NET Core χρησιμοποιείται για τη δημιουργία των χρηστών μελών του Azure AD που μπορούν στη συνέχεια να χρησιμοποιήσουν ένα TAP για να ρυθμίσουν τον λογαριασμό. Αυτός είναι ένας πολύ καλός τρόπος για να ενσωματώσετε χρήστες στον ενοικιαστή σας.

Κώδικας: https://github.com/damienbod/AzureAdTapOnboarding

Η εφαρμογή ASP.NET Core πρέπει να ενσωματώνει διαφορετικούς τύπους χρηστών Azure AD. Ορισμένοι χρήστες δεν μπορούν να χρησιμοποιήσουν έλεγχο ταυτότητας χωρίς κωδικό πρόσβασης (ακόμη) και επομένως απαιτείται και ρύθμιση κωδικού πρόσβασης για αυτούς τους χρήστες. Το TAP λειτουργεί μόνο με μέλη και πρέπει επίσης να υποστηρίζουμε τους επισκέπτες επισκέπτες με κάποια εναλλακτική ροή ενσωμάτωσης. Υποστηρίζονται ή είναι δυνατοί διαφορετικοί τύποι ροών χρηστών:

  • Ροή χρηστών μελών AAD με έλεγχο ταυτότητας TAP και FIDO2
  • Ροή χρηστών μελών AAD με κωδικό πρόσβασης χρησιμοποιώντας έλεγχο ταυτότητας email/κωδικού πρόσβασης
  • Ροή χρηστών μελών AAD με ρύθμιση κωδικού πρόσβασης και έλεγχο ταυτότητας τηλεφώνου
  • Ροή επισκεπτών AAD με ενοποιημένη σύνδεση
  • Ροή επισκεπτών χρήστη AAD με λογαριασμό Microsoft
  • Ροή επισκεπτών χρήστη AAD με κωδικό email

Το FIDO2 θα πρέπει να χρησιμοποιείται για όλους τους υπαλλήλους της επιχείρησης με λογαριασμό γραφείου στην επιχείρηση. Εάν αυτό δεν είναι δυνατό, τότε τουλάχιστον οι διαχειριστές IT θα πρέπει να αναγκαστούν να χρησιμοποιήσουν τον έλεγχο ταυτότητας FIDO2 και οι εταιρείες θα πρέπει να σχεδιάσουν μια στρατηγική για το πώς να μεταβούν σε έναν έλεγχο ταυτότητας ανθεκτικό στο phishing. Αυτό θα μπορούσε να εξαναγκαστεί με ένα PIM και μια πολιτική συνεχούς πρόσβασης για εργασίες διαχείρισης. Χρησιμοποιώντας το FIDO2, οι ταυτότητες προστατεύονται με έλεγχο ταυτότητας ανθεκτικό στο phishing. Αυτό θα πρέπει να αποτελεί προϋπόθεση για οποιαδήποτε επαγγελματική λύση.

Οι χρήστες του Azure AD χωρίς υπολογιστή μπορούν να χρησιμοποιήσουν έναν κωδικό email ή έναν έλεγχο ταυτότητας SMS. Πρόκειται για έλεγχο ταυτότητας χαμηλής ασφάλειας και οι εφαρμογές δεν πρέπει να εκθέτουν ευαίσθητες πληροφορίες σε αυτούς τους τύπους χρηστών.

Ρύθμιση

Η εφαρμογή ASP.NET Core χρησιμοποιεί Microsoft.Identity.Web και το Microsoft.Identity.Web.MicrosoftGraphBeta Πακέτα Nuget για την υλοποίηση των πελατών Azure AD. Το πρόγραμμα-πελάτης ASP.NET Core είναι μια εφαρμογή απόδοσης διακομιστή και χρησιμοποιεί μια εγγραφή εφαρμογής Azure που απαιτεί ένα μυστικό ή ένα πιστοποιητικό για την απόκτηση διακριτικών πρόσβασης.

Η εφαρμογή ενσωμάτωσης χρησιμοποιεί δικαιώματα εφαρμογών Microsoft Graph για τη δημιουργία των χρηστών και την προετοιμασία της ροής του προσωρινού πάσου πρόσβασης (TAP). Χρησιμοποιούνται οι ακόλουθες άδειες εφαρμογής:

  • User.EnableDisableAccount.All
  • Χρήστης.ReadWrite.All
  • UserAuthenticationMethod.ReadWrite.All

Τα δικαιώματα προστίθενται σε μια ξεχωριστή εγγραφή της εφαρμογής Azure και απαιτούν ένα μυστικό για χρήση. Σε μια δεύτερη φάση, θα εξετάσω την εφαρμογή της πρόσβασης του Graph API χρησιμοποιώντας δικαιώματα ανάθεσης του Microsoft Graph. Είναι επίσης δυνατό να χρησιμοποιήσετε μια ταυτότητα διαχειριζόμενης υπηρεσίας για να αποκτήσετε ένα διακριτικό πρόσβασης στο γράφημα με τα απαιτούμενα δικαιώματα.

Ενσωμάτωση μελών με χρήση χωρίς κωδικό πρόσβασης

Κατά την ενσωμάτωση ενός νέου χρήστη Azure AD με κωδικό πρόσβασης και TAP, αυτό πρέπει να υλοποιηθεί σε δύο βήματα. Αρχικά, δημιουργείται ένας νέος χρήστης του Microsoft Graph με τον τύπο μέλος. Αυτό απαιτεί άγνωστο χρονικό διάστημα για να ολοκληρωθεί στο Azure AD. Όταν ολοκληρωθεί αυτό, δημιουργείται μια νέα μέθοδος ελέγχου ταυτότητας TAP. Χρησιμοποίησα το πακέτο Polly Nuget για να το δοκιμάσω ξανά μέχρι να επιτύχει το αίτημα TAP. Μετά την επιτυχία, το προσωρινό πάσο πρόσβασης εμφανίζεται στη διεπαφή χρήστη. Εάν επρόκειτο για νέο υπάλληλο ή κάτι παρόμοιο, θα μπορούσατε να το εκτυπώσετε και να αφήσετε τον χρήστη να ολοκληρώσει τη διαδικασία.

private async Task CreateMember(UserModel userData)
{
	var createdUser = await _aadGraphSdkManagedIdentityAppClient
					.CreateGraphMemberUserAsync(userData);

	if (createdUser!.Id != null)
	{
		if (userData.UsePasswordless)
		{
			var maxRetryAttempts = 7;
			var pauseBetweenFailures = TimeSpan.FromSeconds(3);

			var retryPolicy = Policy
				.Handle<HttpRequestException>()
				.WaitAndRetryAsync(maxRetryAttempts, i => pauseBetweenFailures);

			await retryPolicy.ExecuteAsync(async () =>
			{
				var tap = await _aadGraphSdkManagedIdentityAppClient
					.AddTapForUserAsync(createdUser.Id);

				AccessInfo = new CreatedAccessModel
				{
					Email = createdUser.Email,
					TemporaryAccessPass = tap!.TemporaryAccessPass
				};
			});
		}
		else
		{
			AccessInfo = new CreatedAccessModel
			{
				Email = createdUser.Email,
				Password = createdUser.Password
			};
		}
	}
}

ο CreateGraphMemberUserAsync Η μέθοδος δημιουργεί έναν νέο χρήστη του Microsoft Graph. Για να χρησιμοποιήσετε ένα προσωρινό πάσο πρόσβασης, πρέπει να χρησιμοποιηθεί ένας χρήστης μέλος. Οι επισκέπτες χρήστες δεν μπορούν να εγγραφούν με αυτόν τον τρόπο. Παρόλο που δεν χρησιμοποιούμε κωδικό πρόσβασης σε αυτήν τη διαδικασία, η επικύρωση χρήστη του Microsoft Graph μας αναγκάζει να δημιουργήσουμε έναν. Απλώς δημιουργούμε έναν τυχαίο κωδικό πρόσβασης και δεν θα τον επιστρέψουμε. Αυτός ο κωδικός πρόσβασης δεν θα ενημερωθεί.

public async Task<CreatedUserModel> CreateGraphMemberUserAsync
	(UserModel userModel)
{
	if (!userModel.Email.ToLower().EndsWith(_aadIssuerDomain.ToLower()))
	{
		throw new ArgumentException("A guest user must be invited!");
	}

	var graphServiceClient = _graphService
		.GetGraphClientWithManagedIdentityOrDevClient();

	var password = GetRandomString();
	var user = new User
	{
		DisplayName = userModel.UserName,
		Surname = userModel.LastName,
		GivenName = userModel.FirstName,
		OtherMails = new List<string> { userModel.Email },
		UserType = "member",
		AccountEnabled = true,
		UserPrincipalName = userModel.Email,
		MailNickname = userModel.UserName,
		PasswordProfile = new PasswordProfile
		{
			Password = password,
			// We use TAP if a paswordless onboarding is used
			ForceChangePasswordNextSignIn = !userModel.UsePasswordless
		},
		PasswordPolicies = "DisablePasswordExpiration"
	};

	var createdUser = await graphServiceClient.Users
		.Request()
		.AddAsync(user);

	return new CreatedUserModel
	{
		Email = createdUser.UserPrincipalName,
		Id = createdUser.Id,
		Password = password
	};
}

ο TemporaryAccessPassAuthenticationMethod Το αντικείμενο δημιουργείται χρησιμοποιώντας το Microsoft Graph. Δημιουργούμε μια χρήση μόλις TAP. Ο κωδικός πρόσβασης επιστρέφεται και εμφανίζεται στη διεπαφή χρήστη.

public async Task<TemporaryAccessPassAuthenticationMethod?> 
	AddTapForUserAsync(string userId)
{
	var graphServiceClient = _graphService
		.GetGraphClientWithManagedIdentityOrDevClient();

	var tempAccessPassAuthMethod 
		= new TemporaryAccessPassAuthenticationMethod
	{
		//StartDateTime = DateTimeOffset.Now,
		LifetimeInMinutes = 60,
		IsUsableOnce = true, 
	};

	var result = await graphServiceClient.Users[userId]
		.Authentication
		.TemporaryAccessPassMethods
		.Request()
		.AddAsync(tempAccessPassAuthMethod);

	return result;
}

ο https://aka.ms/mysecurityinfo ο σύνδεσμος μπορεί να χρησιμοποιηθεί για την ολοκλήρωση της ροής. Ο νέος χρήστης μπορεί να κάνει κλικ σε αυτόν τον σύνδεσμο και να εισάγει το email και τον κωδικό πρόσβασης.

Τώρα που ο χρήστης έχει πιστοποιηθεί, μπορεί να προσθέσει μια μέθοδο ελέγχου ταυτότητας χωρίς κωδικό πρόσβασης. Χρησιμοποιώ εξωτερικό κλειδί FIDO2.

Μετά τη ρύθμιση, ο χρήστης μπορεί να εγγραφεί και να ελέγξει την ταυτότητα. Θα πρέπει να χρησιμοποιήσετε τουλάχιστον δύο κλειδιά ασφαλείας.

Αυτός είναι ένας καταπληκτικός τρόπος ενσωμάτωσης χρηστών που επιτρέπει στους χρήστες να ελέγχουν την ταυτότητα με τρόπο ανθεκτικό στο phishing χωρίς να απαιτούν ή να χρησιμοποιούν κωδικό πρόσβασης. Το FIDO2 είναι ο συνιστώμενος και καλύτερος τρόπος για τον έλεγχο ταυτότητας των χρηστών και με την κυκλοφορία των κλειδιών πρόσβασης, αυτό θα γίνει επίσης πιο φιλικό προς το χρήστη.

Ενσωμάτωση μελών με χρήση κωδικού πρόσβασης 😦

Λόγω του γεγονότος ότι ορισμένες εταιρείες εξακολουθούν να χρησιμοποιούν έλεγχο ταυτότητας παλαιού τύπου ή θα θέλαμε να υποστηρίξουμε χρήστες χωρίς υπολογιστή, πρέπει επίσης να ενσωματώνουμε χρήστες με κωδικούς πρόσβασης. Όταν χρησιμοποιείτε κωδικούς πρόσβασης, ο χρήστης πρέπει να ενημερώσει τον κωδικό πρόσβασης κατά την πρώτη χρήση. Ο χρήστης θα πρέπει να προσθέσει ένα MFA, εάν δεν το εξαναγκάσει ο ενοικιαστής. Ορισμένοι υπάλληλοι ενδέχεται να μην έχουν υπολογιστή και θα ήθελαν από τον χρήστη ένα τηλέφωνο για έλεγχο ταυτότητας. Ένας κωδικός SMS θα ήταν ένας καλός τρόπος για να το πετύχετε αυτό. Αυτό φυσικά δεν είναι πολύ ασφαλές, επομένως θα πρέπει να περιμένετε ότι αυτοί οι λογαριασμοί θα χαθούν ή θα παραβιαστούν και επομένως τα ευαίσθητα δεδομένα θα πρέπει να αποφεύγονται για εφαρμογές που χρησιμοποιούνται από αυτούς τους λογαριασμούς. Η ροή κώδικα της συσκευής θα μπορούσε να χρησιμοποιηθεί μαζί σε έναν κοινόχρηστο υπολογιστή με το κινητό τηλέφωνο χρήστη. Η έναρξη μιας ροής ελέγχου ταυτότητας από έναν κωδικό QR δεν είναι ασφαλής, καθώς δεν είναι ασφαλής έναντι του ηλεκτρονικού „ψαρέματος“ (phishing), αλλά καθώς το SMS χρησιμοποιείται για αυτούς τους τύπους χρηστών, δεν είναι ήδη πολύ ασφαλές. Και πάλι τα ευαίσθητα δεδομένα πρέπει να αποφεύγονται για εφαρμογές που δέχονται αυτούς τους λογαριασμούς χαμηλής ασφάλειας. Όλα είναι θέμα ισορροπίας, ίσως κάποια μέρα σύντομα όλοι οι χρήστες θα έχουν κλειδιά ασφαλείας ή κωδικούς πρόσβασης FIDO2 για χρήση και μπορούμε να αποφύγουμε αυτού του είδους τις λύσεις.

Ενσωμάτωση προσκεκλημένων χρηστών (προσκλήσεις)

Οι φιλοξενούμενοι χρήστες δεν μπορούν να εγγραφούν δημιουργώντας έναν χρήστη Microsoft Graph. Πρέπει να στείλετε μια πρόσκληση στον επισκέπτη χρήστη για τον ενοικιαστή σας. Το Microsoft Graph παρέχει ένα API για αυτό. Υπάρχει διαφορετικός τύπος επισκεπτών χρηστών, ανάλογα με τον τύπο λογαριασμού και τον τύπο της μεθόδου ελέγχου ταυτότητας. Η πρόσκληση επιστρέφει μια διεύθυνση URL εξαργύρωσης πρόσκλησης που μπορεί να χρησιμοποιηθεί για τη ρύθμιση του λογαριασμού. Αυτή η διεύθυνση URL αποστέλλεται στο email που χρησιμοποιείται στην πρόσκληση και δεν χρειάζεται να εμφανίζεται στη διεπαφή χρήστη.

private async Task InviteGuest(UserModel userData)
{
	var invitedGuestUser = await _aadGraphSdkManagedIdentityAppClient
					.InviteGuestUser(userData, _inviteUrl);

	if (invitedGuestUser!.Id != null)
	{
		AccessInfo = new CreatedAccessModel
		{
			Email = invitedGuestUser.InvitedUserEmailAddress,
			InviteRedeemUrl = invitedGuestUser.InviteRedeemUrl
		};
	}
}

ο InviteGuestUser Η μέθοδος χρησιμοποιείται για τη δημιουργία του αντικειμένου πρόσκλησης και αυτό αποστέλλεται ως αίτημα ανάρτησης HTTP στο API του Microsoft Graph.

public async Task<Invitation?> InviteGuestUser
	(UserModel userModel, string redirectUrl)
{
	if (userModel.Email.ToLower().EndsWith(_aadIssuerDomain.ToLower()))
	{
		throw new ArgumentException("user must be from a different domain!");
	}

	var graphServiceClient = _graphService
		.GetGraphClientWithManagedIdentityOrDevClient();

	var invitation = new Invitation
	{
		InvitedUserEmailAddress = userModel.Email,
		SendInvitationMessage = true,
		InvitedUserDisplayName 
			= $"{userModel.FirstName} {userModel.LastName}",
		InviteRedirectUrl = redirectUrl,
		InvitedUserType = "guest"
	};

	var invite = await graphServiceClient.Invitations
		.Request()
		.AddAsync(invitation);

	return invite;
}

Σημειώσεις

Η ενσωμάτωση χρηστών με το Microsoft Graph μπορεί να είναι περίπλοκη επειδή πρέπει να γνωρίζετε ποιες παραμέτρους και πώς πρέπει να δημιουργηθούν οι χρήστες. Τα μέλη του Azure AD μπορούν να δημιουργηθούν χρησιμοποιώντας τα API χρηστών του Microsoft Graph, ενώ οι φιλοξενούμενοι χρήστες δημιουργούνται χρησιμοποιώντας τα API πρόσκλησης Microsoft Graph. Η ενσωμάτωση χρηστών με το TAP και το FIDO2 είναι ένας πολύ καλός τρόπος για την υλοποίηση αυτής της ροής εργασίας. Από σήμερα, αυτό εξακολουθεί να είναι μέρος της έκδοσης beta.

Συνδέσεις

https://entra.microsoft.com/

https://learn.microsoft.com/en-us/azure/active-directory/authentication/howto-authentication-temporary-access-pass

https://learn.microsoft.com/en-us/graph/authenticationmethods-get-started

https://learn.microsoft.com/en-us/azure/active-directory/authentication/howto-authentication-passwordless-security-key-on-premises

https://learn.microsoft.com/en-us/azure/active-directory/external-identities/external-identities-overview

https://learn.microsoft.com/en-us/azure/active-directory/external-identities/b2b-quickstart-add-guest-users-portal

Schreibe einen Kommentar