2017-02-07 4 views
1

Я хотел знать, как мы можем создавать вызовы графического API для гостевых пользователей в Azure AD. Я могу добиться этого для внутренних пользователей, используя примеры API, приведенные here, но те же вызовы не работают на гостевом пользователе. Есть ли разница в том, как нужно делать запросы?Графические запросы API для гостевых пользователей в Azure AD

+0

Что именно вы имеете в виду, они не работают? Какие звонки? – juunas

+0

Я имею в виду вызовы API Графа для пользователей, описанных здесь (https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations). Например, API-запрос для получения информации о пользователе: https://graph.windows.net/ /users/? Api-version = 2013-04-05 Это работает в случае внутренних пользователей. Но в случае внешних пользователей он возвращает код ответа 400. –

+0

В дополнение к коду состояния вы должны проверить тело ответа, оно может содержать несколько деталей. – juunas

ответ

2

Учетные записи гостей в вашем арендаторе будут иметь другое имя участника-пользователя, кроме UPN, которое у них есть у их домашнего арендатора. Вы должны иметь возможность увидеть это, запросив всех пользователей вашего арендатора и найти внешних пользователей, у которых есть «измененное» имя участника-пользователя, обычно с «EXT».

Вы можете видеть прямой пример этого в нашем демонстрационном Арендатором here

"userPrincipalName": "djayachandran.cw_mmm.com#EXT#@GraphDir1.onmicrosoft.com", 

Похоже, вам нужно будет запрашивать для этих пользователей, использующих другие свойства, когда их старый UPN не изменилось, как «почте ' имущество. В конечном итоге вы хотите найти ObjectId интересующего вас пользователя и использовать его в качестве ключа для поиска информации о пользователе. Вы должны иметь возможность получить идентификатор объекта из токена подписанного пользователя.

Дайте мне знать, если это поможет! Спасибо, Shawn Tabrizi

+0

Я могу выполнить операцию получения для пользователя с идентификатором объекта. Но после аутентификации у меня будет только имя пользователя, так как я могу получить идентификатор объекта с помощью accessToken? У меня проблемы со всеми API-интерфейсами, связанными с паролем. Сброс пароля и смена пароля не будут работать для гостевых пользователей моего арендатора, поскольку они аутентифицированы, а их пароли хранятся у собственного арендатора. Итак, вопрос в том, как эти пользователи перезагружают или изменяют свои пароли? –

+1

Идея с внешними пользователями заключается в том, что их личности не управляются вами, они управляются их собственными организациями. Чтобы сбросить пароли, они либо попросят своих администраторов, либо, если они включены для сброса пароля самообслуживания, сбросят свои собственные пароли. –

0

Ответ @Shawn Tabrizi выше помог мне достичь того, что мне нужно (получить информацию о группе Azure AD для входа в систему пользователя).

Чтобы получить пользователя AD ObjectID от претензий идентичности, я использовал это:

using System.Linq; 
using System.Security.Claims; 

namespace HealthcareEfficiencyService_webApp.Helpers 
{ 
    public class ClaimsHelper 
    { 
     private readonly static string objectIdClaimsType = "http://schemas.microsoft.com/identity/claims/objectidentifier"; 

     public static string getAdObjectId(ClaimsIdentity claimsIdentity) 
     { 
      return claimsIdentity.Claims.FirstOrDefault(x => x.Type == objectIdClaimsType).Value; 
     } 
    } 
}