2016-11-10 44 views
6

Używamy platformy Azure B2C do uwierzytelniania naszych użytkowników, co działa dobrze. Po rejestracji dodajemy do naszych użytkowników niestandardowe roszczenia, które zostały zdefiniowane w portalu B2C jako "Atrybuty użytkownika" za pomocą api wykresu. Kiedy loguję się do portalu, widzę, że te wartości zostały ustawione przez nasze wywołania, podobnie jak niektóre standardowe wartości roszczeń (tzn. Ustawiamy Display Name, łącząc wartości givenName i lastName).W jaki sposób usługa uwierzytelniania usługi Azure Active Directory może wymusić ponowne wysłanie identyfikatora id_ ze zaktualizowanymi roszczeniami?

Problem polega na tym, że po ustawieniu tych wartości nie pojawiają się w tokenie pobranym poprzez wysłanie tokena dostępu do uwierzytelnionych punktów końcowych, dopóki użytkownik nie wyloguje się i nie wróci ponownie (co jest oczywiście piękne okropne wrażenia użytkownika po rejestracji). Wygląda na to, że oryginalny identyfikator id_token jest buforowany, gdy użytkownik jest tworzony i to właśnie jest zwracane.

To nie ma sensu, ponieważ wydaje się rozsądne, aby użytkownik mógł zaktualizować swój profil (wartości roszczeń) podczas logowania do aplikacji i aby te zmiany natychmiast wpłynęły bez konieczności ponownego uwierzytelniania?

Czy ktoś mógłby wyjaśnić, jak/jeśli możliwe jest wymuszenie wygaśnięcia buforowanego identyfikatora id_token na serwerze, tak, że gdy zażądamy identyfikatora id_token za pomocą tokena dostępu, identyfikator id_token zawiera najbardziej aktualne wartości roszczeń?

Odpowiedz

1

OK więc po prawie miesiącu oczekiwania na odpowiedź, oficjalna linia:

„Grupa produktów zidentyfikować, że to jest na mapie drogowej nawet, że wciąż nie ma ostatecznego terminu powinno się zdarzyć w parę miesięcy."

W zasadzie nie potwierdzili, że to błąd i nie mogą stwierdzić, kiedy ten scenariusz będzie obsługiwany. Dość niski poziom wsparcia, aby być szczerym.

+0

Dalsze rozważania na temat tego, co próbuję zrobić, i na temat frustracji: http://www.rndthoughts.co.uk/2017/02/10/azure-active-directory-claims-extensions-issues-and -identyfikacyjne wiadomości e-mail / – RNDThoughts

4

Kwestia jesteśmy o to, że po te wartości są ustawione, nie pojawiają się one w tokena pobierane przez wysłanie token dostępu do punktów końcowych uwierzytelnić, dopóki użytkownik jest wylogowany i ponownego (co jest oczywiście dość nieprzyjemne wrażenie po rejestracji).

Czy mógłbyś pokazać szczegóły dotyczące żądania uzyskania identyfikatora id_token?

podstawie moich badań, mogę nabyć id_token ze zaktualizowanym zastrzeżeniu udanej jak czynności:

1. zaloguj się do aplikacji internetowej

2. zaktualizować DisplayName użyciu Azure AD wykres jak poniżej:

POST: https://graph.windows.net/xxxx.onmicrosoft.com/users/{userId}?api-version=1.6 
{ 
    "displayName":"newValue" 
} 

3. ponowne zwrócenie się id_token od końcowego OAuth2.0 odpowiedzialnego za pomocą żądania HTTP bez znaku-out/sign-in (można także uchwycić dokładny żądanie użycia Skrzypka po zalogowaniu się do aplikacji)

GET:https://login.microsoftonline.com/xxxx.onmicrosoft.com/oauth2/authorize?client_id={clientId}&redirect_uri={redirectURL}&response_type=id_token&scope=email+openid&response_mode=query&nonce=HWUavSky1PksCJC5Q0xHsw%3d%3d&nux=1&nca=1&domain_hint={XXXX.onmicrosoft.com} 

4. wartość zgłoszenia aktualizacji jest wyświetlana w nowym identyfikatorze id_token zgodnie z oczekiwaniami. Aby zawęzić ten problem, możesz zobaczyć, czy w aplikacji jest bufor pamięci dla id_token.

+0

Czy możesz wyjaśnić trochę lepiej? W punkcie 3 nawiązujesz połączenie z autoryzowanym punktem końcowym, ale nie określasz, w jaki sposób serwer wie, że już jesteś uwierzytelniony, a Twoja tożsamość w tym momencie.Czy przeglądarka ponownie wysyła token uwierzytelniania również w nagłówku? – RNDThoughts

+0

Identyfikator id_token jest wysyłany z punktu końcowego autoryzacji zamiast punktu końcowego tokenu na podstawie [połączenia OpenId] (https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-openid-connect- kod/). A ponieważ przeglądarka ma plik cookie dla usługi Azure AD, ponieważ zalogowałem się do aplikacji internetowej w kroku 1, więc mogę pobrać identyfikator id_token bezpośrednio, bez ponownego uwierzytelniania. Czy źle zrozumiałem? –

+0

Fei, wykonujemy te połączenia za pomocą komponentu Xamarin Auth, więc nie są one dokonywane za pośrednictwem przeglądarki, ale bezpośrednio za pomocą HttpWebRequest. Kiedy próbujemy zasugerować Twoją prośbę w ten sposób, otrzymamy komunikat o błędzie z informacją o tym, że klient nie obsługuje javascript. Dodaliśmy dane tokenu do nagłówka, gdy wysyłamy tę prośbę, ale zostajemy przekierowani na stronę logowania. – RNDThoughts