Подтвердить что ты не робот

NameIdentifier vs ObjectIdentifier

У меня есть многопользовательское приложение ASP.NET с использованием OpenIdConnect и Azure AD в качестве поставщика удостоверений для Office 365. Когда пользователь аутентифицирован, я получаю свои претензии в ClaimsPrincipal.Current.

Я хотел идентифицировать пользователя и сохранить эту ссылку в моей базе данных. Я спросил этот вопрос. Было сказано, что

При попытке однозначно идентифицировать пользователя [NameIdentifier] должен быть ваш выбор.

Но кажется, что утверждение NameIdentifier, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier зависит от приложения. Точно, если я создам другое приложение в Azure AD, то NameIdentifier не будет одинаковым для одного и того же реального пользователя Office365. Имейте в виду, что нам, возможно, придется создать еще один манифест Azure AD (потому что нам могут понадобиться другие области), и мы должны быть в состоянии найти тех же конечных пользователей.

Между тем, я заметил еще одно утверждение: ObjectIdentifier http://schemas.microsoft.com/identity/claims/objectidentifier

Кажется, что ObjectIdentifier, то же самое для всех приложений, защищенных Azure AD, для данного пользователя Office 365.

Можете ли вы точно объяснить разницу между этими двумя претензиями? И что еще более важно, можете ли вы подтвердить, что ObjectIdentifier может использоваться как универсальный идентификатор для пользователя в любой подписке Office 365.

4b9b3361

Ответ 1

Точно, если я создам другое приложение в Azure AD, то NameIdentifier не будет одинаковым для одного и того же реального пользователя Office365.

Я быстро проверил следующее:

Зарегистрируйте multi-tenant-webapp и single-tenant-webapp в AD Contoso.

Войдите в систему с [email protected] и получите идентификатор имени в обоих веб-приложениях, оказалось, что идентификатор name одинаковый в обоих приложениях. Таким образом, идентификатор имени должен иметь возможность идентифицировать пользователей, пересекающих приложения, но он не может использоваться для идентификации пользователя в Azure AD.

Для идентификатора объекта это GUID, который вы можете использовать для идентификации пользователя в Azure AD. Например, вы можете использовать идентификатор объекта для запроса пользователя в Azure AD.

Powershell:

$msolcred = get-credential
connect-msolservice -credential $msolcred
get-msoluser -ObjectId "{guid:object_identifier}"  

И что еще более важно, можете ли вы подтвердить, что ObjectIdentifier может использоваться как универсальный идентификатор для пользователя в любой подписке Office 365.

Основываясь на моем понимании, идентификатор объекта является идентификатором GUID, который может идентифицировать пользователя в подписках Office 365.