Чтобы ответить на ваш первый вопрос, утверждение oid или свойство ObjectId является неизменным и уникальным, поэтому оно никогда не должно изменяться, а также однозначно идентифицировать соответствующий объект каталога.
Специальное примечание только о заявке oid для объекта пользователя. Если в нескольких арендаторах существует один пользователь, он будет содержать разные идентификаторы объектов в каждом арендаторе - они считаются разными учетными записями, даже если пользователь входит в каждую учетную запись с те же учетные данные.
Вот несколько ссылок на эту часть:
1. oid
претензия для пользователя - Справочник по токену Azure AD
Ссылка на основную сущность службы в Azure AD Graph API
Ссылка на сущность службы в бета-версии для Microsoft Graph API
По второму вопросу вы не упомянули много о том, как или по какому сценарию вы авторизуете субъект-службу. Обычно для мультитенантных приложений субъект-служба даже не существует до того, как выполняется процесс согласия для конкретный арендатор (за исключением случаев, когда он является домашним арендатором, когда принципал службы создается в момент регистрации приложения, для всех остальных арендаторов требуется явное согласие).
Предполагая, что процесс согласования уже завершен, для этого арендатора существует принципал Service, и вы просто авторизуете / проверяете вызов в каком-либо приложении, используя утверждения из входящего токена, имеет смысл также рассмотреть утверждения appid и tid, просто чтобы логически понять, какое это приложение Azure AD и является ли клиент действительным или нет. Так что по вашим вариантам это будет 3-я комбинация.
Вот хорошее прочтение об основных принципах Application / Service для мультитенантных приложений, если вы еще этого не видели.
Объекты субъекта приложения и службы в Azure Active Directory