Samouczek: opracowywanie i planowanie aprowizacji punktu końcowego SCIM w usłudze Microsoft Entra ID

Jako deweloper aplikacji możesz użyć interfejsu API zarządzania użytkownikami między domenami (SCIM, System for Cross-Domain Identity Management), aby umożliwić automatyczną aprowizację użytkowników i grup między aplikacją a identyfikatorem Entra firmy Microsoft. W tym artykule opisano sposób tworzenia punktu końcowego SCIM i integracji z usługą aprowizacji firmy Microsoft. Specyfikacja SCIM udostępnia wspólny schemat użytkownika na potrzeby aprowizacji. W przypadku użycia ze standardami federacyjnymi, takimi jak SAML lub OpenID Połączenie, usługa SCIM zapewnia administratorom kompleksowe, oparte na standardach rozwiązanie do zarządzania dostępem.

Provisioning from Microsoft Entra ID to an app with SCIM

SCIM 2.0 to ustandaryzowana definicja dwóch punktów końcowych: /Users punktu końcowego i punktu końcowego /Groups . Używa on typowych punktów końcowych interfejsu API REST do tworzenia, aktualizowania i usuwania obiektów. SCIM składa się ze wstępnie zdefiniowanego schematu typowych atrybutów, takich jak nazwa grupy, nazwa użytkownika, imię, nazwisko i adres e-mail.

Aplikacje, które oferują interfejs API REST SCIM 2.0, mogą zmniejszyć lub wyeliminować ból pracy z zastrzeżonym interfejsem API zarządzania użytkownikami. Na przykład każdy zgodny klient SCIM wie, jak utworzyć wpis HTTP POST obiektu JSON w /Users punkcie końcowym w celu utworzenia nowego wpisu użytkownika. Zamiast potrzebować nieco innego interfejsu API dla tych samych podstawowych akcji, aplikacje zgodne ze standardem SCIM mogą natychmiast korzystać z istniejących klientów, narzędzi i kodu.

Standardowy schemat obiektów użytkownika i interfejsy API rest do zarządzania zdefiniowane w standardzie SCIM 2.0 (RFC 7642, 7643, 7644) umożliwiają dostawcom tożsamości i aplikacjom łatwiejsze integrowanie się ze sobą. Deweloperzy aplikacji, którzy tworzą punkt końcowy SCIM, mogą integrować się z dowolnym klientem zgodnym ze standardem SCIM bez konieczności wykonywania niestandardowych czynności.

Aby zautomatyzować aprowizowanie aplikacji, wymaga ona utworzenia i zintegrowania punktu końcowego SCIM, który jest dostępny przez usługę aprowizacji firmy Microsoft. Wykonaj poniższe kroki, aby rozpocząć aprowizowanie użytkowników i grup w aplikacji.

  1. Projektowanie schematu użytkownika i grupy — zidentyfikuj obiekty i atrybuty aplikacji, aby określić sposób mapowania ich na schemat użytkownika i grupy obsługiwany przez implementację rozwiązania Microsoft Entra SCIM.

  2. Omówienie implementacji rozwiązania Microsoft Entra SCIM — dowiedz się, w jaki sposób usługa aprowizacji firmy Microsoft jest implementowana w celu modelowania obsługi żądań i odpowiedzi protokołu SCIM.

  3. Tworzenie punktu końcowego SCIM — punkt końcowy musi być zgodny z protokołem SCIM 2.0 w celu zintegrowania z usługą aprowizacji firmy Microsoft. Jako opcja użyj bibliotek infrastruktury języka wspólnego firmy Microsoft i przykładów kodu, aby skompilować punkt końcowy. Te przykłady są przeznaczone tylko do celów referencyjnych i testowych; Zalecamy używanie ich jako zależności w aplikacji produkcyjnej.

  4. Zintegruj punkt końcowy SCIM z usługą aprowizacji firmy Microsoft. Identyfikator Entra firmy Microsoft obsługuje kilka aplikacji innych firm, które implementują protokół SCIM 2.0. Jeśli używasz jednej z tych aplikacji, możesz szybko zautomatyzować aprowizowanie i anulowanie aprowizacji użytkowników i grup.

  5. [Opcjonalnie] Publikowanie aplikacji w galerii aplikacji Microsoft Entra — ułatwia klientom odnajdywanie aplikacji i łatwe konfigurowanie aprowizacji.

Diagram that shows the required steps for integrating a SCIM endpoint with Microsoft Entra ID.

Projektowanie schematu użytkownika i grupy

Każda aplikacja wymaga różnych atrybutów do utworzenia użytkownika lub grupy. Rozpocznij integrację, identyfikując wymagane obiekty (użytkowników, grupy) i atrybuty (nazwa, menedżer, stanowisko itp.) wymagane przez aplikację.

Standard SCIM definiuje schemat zarządzania użytkownikami i grupami.

Podstawowy schemat użytkownika wymaga tylko trzech atrybutów (wszystkie inne atrybuty są opcjonalne):

  • id, identyfikator zdefiniowany przez dostawcę usług
  • userName, unikatowy identyfikator użytkownika (zazwyczaj mapuje na główną nazwę użytkownika Firmy Microsoft Entra)
  • meta, metadane tylko do odczytu obsługiwane przez dostawcę usług

Oprócz podstawowego schematu użytkownika standard SCIM definiuje rozszerzenie użytkownika przedsiębiorstwa z modelem rozszerzania schematu użytkownika w celu zaspokojenia potrzeb aplikacji.

Jeśli na przykład aplikacja wymaga zarówno poczty e-mail użytkownika, jak i menedżera użytkownika, użyj podstawowego schematu, aby zebrać adres e-mail użytkownika i schemat użytkownika przedsiębiorstwa , aby zebrać menedżera użytkownika.

Aby zaprojektować schemat, wykonaj następujące kroki:

  1. Wyświetl listę atrybutów wymaganych przez aplikację, a następnie kategoryzuj jako atrybuty wymagane do uwierzytelniania (na przykład loginName i email). Atrybuty są potrzebne do zarządzania cyklem życia użytkownika (na przykład stan/aktywny) i wszystkie inne atrybuty potrzebne do działania aplikacji (na przykład menedżer, tag).

  2. Sprawdź, czy atrybuty są już zdefiniowane w podstawowym schemacie użytkownika lub schemacie użytkownika przedsiębiorstwa. Jeśli nie, musisz zdefiniować rozszerzenie schematu użytkownika, które obejmuje brakujące atrybuty. Zobacz przykład rozszerzenia dla użytkownika, aby umożliwić aprowizowanie użytkownika tag.

  3. Mapowanie atrybutów SCIM na atrybuty użytkownika w identyfikatorze Entra firmy Microsoft. Jeśli jeden z atrybutów zdefiniowanych w punkcie końcowym SCIM nie ma wyraźnego odpowiednika w schemacie użytkownika Microsoft Entra, poprowadz administratora dzierżawy w celu rozszerzenia schematu lub użyj atrybutu rozszerzenia, jak pokazano w przykładzie tags dla właściwości.

W poniższej tabeli wymieniono przykład wymaganych atrybutów:

Wymagany atrybut aplikacji/przykład Zamapowany atrybut SCIM Zamapowany atrybut Microsoft Entra
Loginname userName userPrincipalName
firstName name.givenName givenName
lastName name.familyName Nazwisko
workMail emails[type eq "work"].value Adres pocztowy
manager manager manager
tag urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User:tag extensionAttribute1
status aktywne isSoftDeleted (obliczona wartość nie jest przechowywana na użytkowniku)

Poniższy ładunek JSON przedstawia przykładowy schemat SCIM:

{
     "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
      "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
      "urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User"],
     "userName":"bjensen@testuser.com",
     "id": "48af03ac28ad4fb88478",
     "externalId":"bjensen",
     "name":{
       "familyName":"Jensen",
       "givenName":"Barbara"
     },
     "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
     "manager": "123456"
   },
     "urn:ietf:params:scim:schemas:extension:CustomExtensionName:2.0:User": {
     "tag": "701984",
   },
   "meta": {
     "resourceType": "User",
     "created": "2010-01-23T04:56:22Z",
     "lastModified": "2011-05-13T04:42:34Z",
     "version": "W\/\"3694e05e9dff591\"",
     "location":
 "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
   }
}   

Uwaga

Oprócz atrybutów wymaganych dla aplikacji reprezentacja JSON zawiera również wymagane idatrybuty , externalIdi meta .

Pomaga to kategoryzować między /User i /Group mapować wszystkie domyślne atrybuty użytkownika w identyfikatorze Entra firmy Microsoft do SCIM RFC, zobacz , jak dostosować atrybuty są mapowane między identyfikatorem Entra firmy Microsoft i punktem końcowym SCIM.

W poniższej tabeli wymieniono przykład atrybutów użytkownika:

Użytkownik firmy Microsoft Entra urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
IsSoftDeleted aktywne
department urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
displayName displayName
Idpracownika urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber
Facsimile-PhoneNumber phoneNumbers[type eq "fax"].value
givenName name.givenName
jobTitle title
poczta emails[type eq "work"].value
mailNickname externalId
manager urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager
mobilnych phoneNumbers[type eq "mobile"].value
postalCode addresses[type eq "work"].postalCode
adresy proxy email[type eq "other"]. Wartość
physical-Delivery-OfficeName addresses[type eq "other"]. Sformatowany
streetAddress addresses[type eq "work"].streetAddress
surname name.familyName
numer telefonu phoneNumbers[type eq "work"].value
user-PrincipalName userName

W poniższej tabeli wymieniono przykład atrybutów grupy:

Grupa Microsoft Entra urn:ietf:params:scim:schemas:core:2.0:Group
displayName displayName
członkowie członkowie
objectId externalId

Uwaga

Nie musisz obsługiwać zarówno użytkowników, jak i grup ani wszystkich atrybutów przedstawionych w tym miejscu, jest to tylko odwołanie do tego, jak atrybuty w identyfikatorze Entra firmy Microsoft są często mapowane na właściwości w protokole SCIM.

W dokumencie RFC SCIM zdefiniowano kilka punktów końcowych. Możesz zacząć od punktu końcowego /User , a następnie rozwinąć się z tego miejsca. W poniższej tabeli wymieniono niektóre punkty końcowe SCIM:

Punkt końcowy opis
/użytkownika Wykonywanie operacji CRUD na obiekcie użytkownika.
/Grupa Wykonywanie operacji CRUD na obiekcie grupy.
/Schematów Zestaw atrybutów obsługiwanych przez każdego klienta i dostawcę usług może się różnić. Jeden dostawca usług może obejmować name, titlei emails, podczas gdy inny dostawca usług używa name, titlei phoneNumbers. Punkt końcowy schematów umożliwia odnajdywanie obsługiwanych atrybutów.
/Zbiorczego Operacje zbiorcze umożliwiają wykonywanie operacji na dużej kolekcji obiektów zasobów w ramach jednej operacji (na przykład zaktualizowanie członkostwa dla dużej grupy).
/ServiceProviderConfig Zawiera szczegółowe informacje o funkcjach standardu SCIM, które są obsługiwane, na przykład obsługiwane zasoby i metodę uwierzytelniania.
/ResourceTypes Określa metadane dotyczące każdego zasobu.

Uwaga

Użyj punktu końcowego /Schemas , aby obsługiwać atrybuty niestandardowe lub jeśli schemat zmienia się często, ponieważ umożliwia klientowi automatyczne pobieranie najbardziej aktualnego schematu. Użyj punktu końcowego /Bulk do obsługi grup.

Omówienie implementacji rozwiązania Microsoft Entra SCIM

Usługa microsoft Entra provisioning jest przeznaczona do obsługi interfejsu API zarządzania użytkownikami SCIM 2.0.

Ważne

Zachowanie implementacji rozwiązania Microsoft Entra SCIM zostało ostatnio zaktualizowane 18 grudnia 2018 r. Aby uzyskać informacje na temat zmian, zobacz Zgodność protokołu SCIM 2.0 z usługą aprowizacji użytkowników firmy Microsoft Entra.

W ramach specyfikacji protokołu SCIM 2.0 aplikacja musi obsługiwać następujące wymagania:

Wymaganie Uwagi referencyjne (protokół SCIM)
Tworzenie użytkowników i opcjonalnie również grup Sekcja 3.3
Modyfikowanie użytkowników lub grup przy użyciu żądań PATCH Sekcja 3.5.2. Obsługa zapewnia, że grupy i użytkownicy są aprowizowani w wydajny sposób.
Pobieranie znanego zasobu utworzonego wcześniej przez użytkownika lub grupę Sekcja 3.4.1
Wykonywanie zapytań dotyczących użytkowników lub grup Sekcja 3.4.2. Domyślnie użytkownicy są pobierani przy użyciu zapytań id i z zapytaniami do ich username grup i externalIdi są odpytywane za pomocą polecenia displayName.
Filtr excludedAttributes=members podczas wykonywania zapytania o zasób grupy Sekcja 3.4.2.2
Obsługa wyświetlania listy użytkowników i stronicowania Sekcja 3.4.2.4.
Usuwanie nietrwałe użytkownika active=false i przywracanie użytkownika active=true Obiekt użytkownika powinien zostać zwrócony w żądaniu, czy użytkownik jest aktywny. Jedynym czasem, gdy użytkownik nie powinien być zwracany, jest to, gdy jest on ciężko usunięty z aplikacji.
Obsługa punktu końcowego /Schemas Sekcja 7 Punkt końcowy odnajdywania schematu służy do odnajdywania większej liczby atrybutów.
Zaakceptuj pojedynczy token elementu nośnego na potrzeby uwierzytelniania i autoryzacji identyfikatora Entra firmy Microsoft do aplikacji.

Skorzystaj z ogólnych wytycznych podczas implementowania punktu końcowego SCIM, aby zapewnić zgodność z identyfikatorem Entra firmy Microsoft:

Ogólne:

  • id jest wymaganą właściwością dla wszystkich zasobów. Każda odpowiedź zwracająca zasób powinien mieć pewność, że każdy zasób ma tę właściwość, z wyjątkiem ListResponse elementów zerowych.
  • Wysłane wartości powinny być przechowywane w tym samym formacie, który zostały wysłane. Nieprawidłowe wartości powinny zostać odrzucone z opisowym komunikatem o błędzie z możliwością działania. Przekształcenia danych nie powinny odbywać się między danymi z identyfikatora Entra firmy Microsoft i danymi przechowywanymi w aplikacji SCIM. (na przykład. Numer telefonu wysłany jako 55555555555 nie powinien zostać zapisany/zwrócony jako +5 (555) 555-5555)
  • Nie jest konieczne uwzględnienie całego zasobu w odpowiedzi PATCH .
  • Nie wymagaj dopasowania uwzględniającego wielkość liter dla elementów strukturalnych w programie SCIM, w szczególności wartości operacji PATCHop , zgodnie z definicją w sekcji 3.5.2. Identyfikator Entra firmy Microsoft emituje wartości op typu Add, Replace i Remove.
  • Microsoft Entra ID wysyła żądania pobrania losowego użytkownika i grupy, aby upewnić się, że punkt końcowy i poświadczenia są prawidłowe. Odbywa się to również w ramach przepływu testowego Połączenie ionu.
  • Obsługa protokołu HTTPS w punkcie końcowym SCIM.
  • Niestandardowe złożone i wielowartościowe atrybuty są obsługiwane, ale identyfikator Entra firmy Microsoft nie ma wielu złożonych struktur danych do ściągania danych z tych przypadków. Atrybuty nazwy/wartości można łatwo mapować, ale przepływ danych do złożonych atrybutów z co najmniej trzema atrybutami podrzędnymi nie jest obsługiwany.
  • Wartości podrzędne "type" atrybutów złożonych wielowartościowych muszą być unikatowe. Na przykład nie może istnieć dwa różne adresy e-mail z podtypem "work".
  • Nagłówek wszystkich odpowiedzi powinien mieć typ zawartości: application/scim+json

Pobieranie zasobów:

  • Odpowiedź na żądanie zapytania/filtru powinna zawsze być .ListResponse
  • Firma Microsoft Entra używa tylko następujących operatorów: eq, and
  • Atrybut, dla którego można wykonywać zapytania dotyczące zasobów, należy ustawić jako pasujący atrybut w aplikacji, zobacz Dostosowywanie mapowań atrybutów aprowizacji użytkowników.

/Użytkowników:

  • Atrybut uprawnień nie jest obsługiwany.
  • Wszystkie atrybuty, które są uznawane za unikatowość użytkownika, muszą być używane jako część filtrowanego zapytania. (na przykład jeśli unikatowość użytkownika jest oceniana zarówno dla userName, jak i wiadomości e-mail[type eq "work"], polecenie GET do /Users z filtrem musi zezwalać zarówno dla parametru userName eq "user@contoso.com" i wiadomości e-mail[type eq "work"].value eq "user@contoso.com".

/Grupy:

  • Grupy są opcjonalne, ale obsługiwane tylko wtedy, gdy implementacja SCIM obsługuje żądania PATCH .
  • Grupy muszą mieć unikatowość w wartości "displayName", aby pasowały do identyfikatora Microsoft Entra ID i aplikacji SCIM. Unikatowość nie jest wymaganiem protokołu SCIM, ale jest wymagana do integracji punktu końcowego SCIM z identyfikatorem Entra firmy Microsoft.

/Schemas (Odnajdywanie schematu):

  • Przykładowe żądanie/odpowiedź
  • Odnajdywanie schematu jest używane w niektórych aplikacjach galerii. Odnajdywanie schematu to jedyna metoda dodawania większej liczby atrybutów do schematu istniejącej aplikacji SCIM galerii. Odnajdywanie schematu nie jest obecnie obsługiwane w niestandardowej aplikacji SCIM spoza galerii.
  • Jeśli wartość nie jest obecna, nie wysyłaj wartości null.
  • Wartości właściwości powinny mieć wielkość liter camel (na przykład readWrite).
  • Musi zwrócić odpowiedź listy.
  • Usługa aprowizacji firmy Microsoft wysyła żądanie /schemas podczas zapisywania konfiguracji aprowizacji. Żądanie jest również wykonywane po otwarciu strony edytowania aprowizacji. Inne odnalezione atrybuty są udostępniane klientom w mapowaniach atrybutów na liście atrybutów docelowych. Odnajdywanie schematu prowadzi tylko do dodawania większej liczby atrybutów docelowych. Atrybuty nie są usuwane.

Aprowizowanie i anulowanie aprowizacji użytkowników

Na poniższym diagramie przedstawiono komunikaty wysyłane przez identyfikator Entra firmy Microsoft do punktu końcowego SCIM w celu zarządzania cyklem życia użytkownika w magazynie tożsamości aplikacji.

Diagram that shows the user deprovisioning sequence.

Aprowizowanie grup i anulowanie aprowizacji

Aprowizowanie grup i anulowanie aprowizacji są opcjonalne. Po zaimplementowaniu i włączeniu na poniższej ilustracji przedstawiono komunikaty wysyłane przez identyfikator Entra firmy Microsoft do punktu końcowego SCIM w celu zarządzania cyklem życia grupy w magazynie tożsamości aplikacji. Te komunikaty różnią się od komunikatów o użytkownikach na dwa sposoby:

  • Żądania pobrania grup określają, że atrybut członków ma zostać wykluczony z dowolnego zasobu dostarczonego w odpowiedzi na żądanie.
  • Żądania określenia, czy atrybut odwołania ma określoną wartość, to żądania dotyczące atrybutu elementów członkowskich.

Na poniższym diagramie przedstawiono sekwencję anulowania aprowizacji grupy:

Diagram that shows the group deprovisioning sequence.

Żądania i odpowiedzi protokołu SCIM

Ten artykuł zawiera przykładowe żądania SCIM emitowane przez usługę aprowizacji firmy Microsoft i przykładowe oczekiwane odpowiedzi. Aby uzyskać najlepsze wyniki, należy zastosować kod aplikacji do obsługi tych żądań w tym formacie i emitować oczekiwane odpowiedzi.

Ważne

Aby dowiedzieć się, jak i kiedy usługa aprowizacji użytkowników firmy Microsoft emituje operacje opisane w tym przykładzie, zobacz sekcję Cykle aprowizacji: Początkowe i przyrostowe w temacie Jak działa aprowizacja.

Operacje użytkownika

Operacje grupy

Odnajdywanie schematów

Operacje użytkownika

  • Użyj userName atrybutów lub emails[type eq "work"] , aby wysyłać zapytania do użytkowników.

Tworzenie użytkowników

Zażądaj

POST /Users

{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "active": true,
    "emails": [{
        "primary": true,
        "type": "work",
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com"
    }],
    "meta": {
        "resourceType": "User"
    },
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName"
    },
    "roles": []
}
Response

Utworzono protokół HTTP/1.1 201

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "48af03ac28ad4fb88478",
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Pobieranie użytkownika

Zażądaj

GET /Users/5d48a0a8e9f04aa38008

Odpowiedź (znaleziono użytkownika)

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5d48a0a8e9f04aa38008",
    "externalId": "58342554-38d6-4ec8-948c-50044d0a33fd",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_feed3ace-693c-4e5a-82e2-694be1b39934",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_22370c1a-9012-42b2-bf64-86099c2a1c22@testuser.com",
        "type": "work",
        "primary": true
    }]
}
Zażądaj

GET /Users/5171a35d82074e068ce2

Odpowiedź (nie znaleziono użytkownika. Szczegóły nie są wymagane, tylko stan).

Nie znaleziono protokołu HTTP/1.1 404

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:Error"
    ],
    "status": "404",
    "detail": "Resource 23B51B0E5D7AE9110A49411D@7cca31655d49f3640a494224 not found"
}

Pobieranie użytkownika według zapytania

Zażądaj

GET /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"

Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
        "id": "2441309d85324e7793ae",
        "externalId": "7fce0092-d52e-4f76-b727-3955bd72c939",
        "meta": {
            "resourceType": "User",
            "created": "2018-03-27T19:59:26.000Z",
            "lastModified": "2018-03-27T19:59:26.000Z"
            
        },
        "userName": "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081",
        "name": {
            "familyName": "familyName",
            "givenName": "givenName"
        },
        "active": true,
        "emails": [{
            "value": "Test_User_91b67701-697b-46de-b864-bd0bbe4f99c1@testuser.com",
            "type": "work",
            "primary": true
        }]
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Pobieranie użytkownika według zapytania — zero wyników

Zażądaj

GET /Users?filter=userName eq "nieistniejący użytkownik"

Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 0,
    "Resources": [],
    "startIndex": 1,
    "itemsPerPage": 20
}

Aktualizuj użytkownika [właściwości wielowartościowe]

Zażądaj

PATCH /Users/6764549bef60420686bc HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
            {
            "op": "Replace",
            "path": "emails[type eq \"work\"].value",
            "value": "updatedEmail@microsoft.com"
            },
            {
            "op": "Replace",
            "path": "name.familyName",
            "value": "updatedFamilyName"
            }
    ]
}
Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "6764549bef60420686bc",
    "externalId": "6c75de36-30fa-4d2d-a196-6bdcdb6b6539",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_fbb9dda4-fcde-4f98-a68b-6c5599e17c27",
    "name": {
        "formatted": "givenName updatedFamilyName",
        "familyName": "updatedFamilyName",
        "givenName": "givenName"
    },
    "active": true,
    "emails": [{
        "value": "updatedEmail@microsoft.com",
        "type": "work",
        "primary": true
    }]
}

Aktualizowanie użytkownika [właściwości z jedną wartością]

Zażądaj

PATCH /Users/5171a35d82074e068ce2 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "userName",
        "value": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com"
    }]
}
Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5171a35d82074e068ce2",
    "externalId": "aa1eca08-7179-4eeb-a0be-a519f7e5cd1a",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "userName": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_49dc1090-aada-4657-8434-4995c25a00f7@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Wyłącz użytkownika

Zażądaj

PATCH /Users/5171a35d82074e068ce2 HTTP/1.1

{
    "Operations": [
        {
            "op": "Replace",
            "path": "active",
            "value": false
        }
    ],
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ]
}
Response
{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "id": "CEC50F275D83C4530A495FCF@834d0e1e5d8235f90a495fda",
    "userName": "deanruiz@testuser.com",
    "name": {
        "familyName": "Harris",
        "givenName": "Larry"
    },
    "active": false,
    "emails": [
        {
            "value": "gloversuzanne@testuser.com",
            "type": "work",
            "primary": true
        }
    ],
    "addresses": [
        {
            "country": "ML",
            "type": "work",
            "primary": true
        }
    ],
    "meta": {
        "resourceType": "Users",
        "location": "/scim/5171a35d82074e068ce2/Users/CEC50F265D83B4530B495FCF@5171a35d82074e068ce2"
    }
}

Usuwanie użytkownika

Zażądaj

DELETE /Users/5171a35d82074e068ce2 HTTP/1.1

Response

HTTP/1.1 204 Brak zawartości

Operacje grupy

  • Grupy są tworzone z pustą listą członków.
  • Użyj atrybutu displayName , aby wykonywać zapytania dotyczące grup.
  • Aktualizacja do żądania PATCH grupy powinna spowodować wystąpienie błędu HTTP 204 Brak zawartości w odpowiedzi. Zwracanie treści z listą wszystkich elementów członkowskich nie jest zalecane.
  • Nie trzeba obsługiwać zwracania wszystkich członków grupy.

Utwórz grupę

Zażądaj

POST /Groups HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group", "http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/2.0/Group"],
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "displayName": "displayName",
    "meta": {
        "resourceType": "Group"
    }
}
Response

Utworzono protokół HTTP/1.1 201

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "927fa2c08dcb4a7fae9e",
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "displayName": "displayName",
    "members": []
}

Pobierz grupę

Zażądaj

GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1

Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "40734ae655284ad3abcc",
    "externalId": "60f1bb27-2e1e-402d-bcc4-ec999564a194",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "displayName": "displayName",
}

Pobieranie grupy według displayName

Zażądaj

GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1

Response

HTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
        "id": "8c601452cc934a9ebef9",
        "externalId": "0db508eb-91e2-46e4-809c-30dcbda0c685",
        "meta": {
            "resourceType": "Group",
            "created": "2018-03-27T22:02:32.000Z",
            "lastModified": "2018-03-27T22:02:32.000Z",
            
        },
        "displayName": "displayName",
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Aktualizuj grupę [atrybuty inne niż składowe]

Zażądaj

PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "displayName",
        "value": "1879db59-3bdf-4490-ad68-ab880a269474updatedDisplayName"
    }]
}
Response

HTTP/1.1 204 Brak zawartości

Aktualizuj grupę [Dodaj członków]

Zażądaj

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Add",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
Response

HTTP/1.1 204 Brak zawartości

Aktualizuj grupę [Usuń członków]

Zażądaj

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Remove",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
Response

HTTP/1.1 204 Brak zawartości

Usuń grupę

Zażądaj

DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1

Response

HTTP/1.1 204 Brak zawartości

Odnajdywanie schematów

Odnajdywanie schematu

Zażądaj

GET /Schemas

Response

HTTP/1.1 200 OK

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "itemsPerPage": 50,
    "startIndex": 1,
    "totalResults": 3,
    "Resources": [
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:core:2.0:User",
    "name" : "User",
    "description" : "User Account",
    "attributes" : [
      {
        "name" : "userName",
        "type" : "string",
        "multiValued" : false,
        "description" : "Unique identifier for the User, typically
used by the user to directly authenticate to the service provider.
Each User MUST include a non-empty userName value.  This identifier
MUST be unique across the service provider's entire set of Users.
REQUIRED.",
        "required" : true,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "server"
      },                
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
        "/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:User"
    }
  },
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:core:2.0:Group",
    "name" : "Group",
    "description" : "Group",
    "attributes" : [
      {
        "name" : "displayName",
        "type" : "string",
        "multiValued" : false,
        "description" : "A human-readable name for the Group.
REQUIRED.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
        "/v2/Schemas/urn:ietf:params:scim:schemas:core:2.0:Group"
    }
  },
  {
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
    "id" : "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
    "name" : "EnterpriseUser",
    "description" : "Enterprise User",
    "attributes" : [
      {
        "name" : "employeeNumber",
        "type" : "string",
        "multiValued" : false,
        "description" : "Numeric or alphanumeric identifier assigned
to a person, typically based on order of hire or association with an
organization.",
        "required" : false,
        "caseExact" : false,
        "mutability" : "readWrite",
        "returned" : "default",
        "uniqueness" : "none"
      },
    ],
    "meta" : {
      "resourceType" : "Schema",
      "location" :
"/v2/Schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    }
  }
]
}

Wymagania dotyczące zabezpieczeń

Wersje protokołu TLS

Jedyną akceptowalną wersją protokołu jest TLS 1.2. Nie jest dozwolona żadna inna wersja protokołu SSL/TLS.

  • Klucze RSA muszą mieć co najmniej 2048 bitów.
  • Klucze ECC muszą mieć co najmniej 256 bitów, generowane przy użyciu zatwierdzonej krzywej eliptycznej

Długość klucza

Wszystkie usługi muszą używać certyfikatów X.509 generowanych przy użyciu kluczy kryptograficznych o wystarczającej długości, co oznacza:

Zestawy szyfrowania

Wszystkie usługi muszą być skonfigurowane do używania następujących zestawów szyfrowania w dokładnej kolejności określonej w przykładzie. Jeśli masz tylko certyfikat RSA, zainstalowane zestawy szyfrowania ECDSA nie mają żadnego wpływu.

Minimalny pasek zestawów szyfrowania TLS 1.2:

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

Zakresy adresów IP

Obecnie usługa aprowizacji Firmy Microsoft działa w ramach zakresów adresów IP dla identyfikatora Entra firmy Microsoft, jak wymieniono tutaj. Możesz dodać zakresy adresów IP wymienione w tagu Microsoft Entra ID, aby zezwolić na ruch z usługi aprowizacji firmy Microsoft do aplikacji. Należy dokładnie przejrzeć listę zakresów adresów IP pod kątem obliczonych adresów. Adres taki jak "40.126.25.32" może być reprezentowany na liście zakresów adresów IP jako "40.126.0.0/18". Możesz również programowo pobrać listę zakresów adresów IP przy użyciu następującego interfejsu API.

Identyfikator Entra firmy Microsoft obsługuje również rozwiązanie oparte na agencie w celu zapewnienia łączności z aplikacjami w sieciach prywatnych (lokalnie, hostowanym na platformie Azure, hostowanym na platformie AWS itp.). Klienci mogą wdrożyć uproszczonego agenta, który zapewnia łączność z identyfikatorem Entra firmy Microsoft bez otwierania portów przychodzących na serwerze w sieci prywatnej. Dowiedz się więcej tutaj.

Tworzenie punktu końcowego SCIM

Po zaprojektowaniu schematu i zrozumieniu implementacji rozwiązania Microsoft Entra SCIM możesz rozpocząć tworzenie punktu końcowego SCIM. Zamiast rozpoczynać od podstaw i tworzyć implementację samodzielnie, możesz polegać na wielu bibliotekach SCIM typu open source opublikowanych przez społeczność SCIM.

Aby uzyskać wskazówki dotyczące tworzenia punktu końcowego SCIM, w tym przykłady, zobacz Tworzenie przykładowego punktu końcowego SCIM.

Przykład kodu referencyjnego platformy .NET Core typu open source opublikowany przez zespół ds. aprowizacji firmy Microsoft jest jednym z takich zasobów, które mogą szybko rozpocząć programowanie. Utwórz punkt końcowy SCIM, a następnie przetestuj go. Użyj kolekcji testów Postman dostarczonych w ramach kodu referencyjnego lub uruchom przykładowe żądania/odpowiedzi.

Uwaga

Kod referencyjny ma pomóc w rozpoczęciu tworzenia punktu końcowego SCIM i jest dostarczany jako "AS IS". Współtworzenie społeczności jest mile widziane, aby pomóc w tworzeniu i utrzymywaniu kodu.

Rozwiązanie składa się z dwóch projektów : Microsoft.SCIM i Microsoft.SCIM.WebHostSample.

Projekt Microsoft.SCIM to biblioteka, która definiuje składniki usługi internetowej zgodnej ze specyfikacją SCIM. Deklaruje interfejs Microsoft.SCIM.IProvider, żądania są tłumaczone na wywołania metod dostawcy, które będą programowane do działania w magazynie tożsamości.

Breakdown: A request translated into calls to the provider's methods

Projekt Microsoft.SCIM.WebHostSample jest aplikacją internetową platformy ASP.NET Core opartą na szablonie Pusty. Umożliwia wdrożenie przykładowego kodu jako autonomicznego, hostowanego w kontenerach lub w usługach Internet Information Services. Implementuje również interfejs Microsoft.SCIM.IProvider , który przechowuje klasy w pamięci jako przykładowy magazyn tożsamości.

public class Startup
{
    ...
    public IMonitor MonitoringBehavior { get; set; }
    public IProvider ProviderBehavior { get; set; }

    public Startup(IWebHostEnvironment env, IConfiguration configuration)
    {
        ...
        this.MonitoringBehavior = new ConsoleMonitor();
        this.ProviderBehavior = new InMemoryProvider();
    }
    ...

Tworzenie niestandardowego punktu końcowego SCIM

Punkt końcowy SCIM musi mieć adres HTTP i certyfikat uwierzytelniania serwera, którego główny urząd certyfikacji jest jedną z następujących nazw:

  • CNNIC
  • Comodo
  • Cybertrust
  • DigiCert
  • Geotrust
  • Globalsign
  • Go Daddy
  • Verisign
  • WoSign
  • Główny urząd certyfikacji DST X3

Zestaw .NET Core SDK zawiera certyfikat dewelopera HTTPS, który jest używany podczas programowania. Certyfikat jest instalowany w ramach pierwszego uruchomienia. W zależności od sposobu uruchamiania aplikacji internetowej ASP.NET Core nasłuchuje innego portu:

  • Microsoft.SCIM.WebHostSample: https://localhost:5001
  • IIS Express: https://localhost:44359

Aby uzyskać więcej informacji na temat protokołu HTTPS w programie ASP.NET Core, użyj następującego linku: Wymuszanie protokołu HTTPS w programie ASP.NET Core

Obsługa uwierzytelniania punktu końcowego

Żądania z usługi aprowizacji firmy Microsoft obejmują token elementu nośnego OAuth 2.0. Serwer autoryzacji wystawia token elementu nośnego. Microsoft Entra ID to przykład zaufanego serwera autoryzacji. Skonfiguruj usługę microsoft Entra provisioning, aby używała jednego z następujących tokenów:

  • Długotrwały token elementu nośnego. Jeśli punkt końcowy SCIM wymaga tokenu elementu nośnego OAuth od wystawcy innego niż identyfikator Entra firmy Microsoft, skopiuj wymagany token elementu nośnego OAuth do opcjonalnego pola Token tajny. W środowisku projektowym można użyć tokenu testowego z punktu końcowego /scim/token . Tokeny testowe nie powinny być używane w środowiskach produkcyjnych.

  • Token elementu nośnego Entra firmy Microsoft. Jeśli pole Token wpisu tajnego jest puste, identyfikator Entra firmy Microsoft zawiera token elementu nośnego OAuth wystawiony przez identyfikator Entra firmy Microsoft z każdym żądaniem. Aplikacje korzystające z identyfikatora Entra firmy Microsoft jako dostawcy tożsamości mogą zweryfikować ten token wystawiony przez identyfikator Entra firmy Microsoft.

    • Aplikacja, która odbiera żądania, powinna zweryfikować wystawcę tokenu jako identyfikator Entra firmy Microsoft dla oczekiwanej dzierżawy firmy Microsoft Entra.
    • Oświadczenie iss identyfikuje wystawcę tokenu. Na przykład "iss":"https://sts.windows.net/12345678-0000-0000-0000-000000000000/". W tym przykładzie podstawowy adres wartości oświadczenia identyfikuje https://sts.windows.net identyfikator Entra firmy Microsoft jako wystawcę, podczas gdy segment adresu względnego 12345678-0000-0000-0000-000000000000000 jest unikatowym identyfikatorem dzierżawy firmy Microsoft Entra, dla której wystawiono token.
    • Odbiorcy tokenu to identyfikator aplikacji dla aplikacji w galerii. Aplikacje zarejestrowane w jednej dzierżawie otrzymują to samo iss oświadczenie z żądaniami SCIM. Identyfikator aplikacji dla wszystkich aplikacji niestandardowych to 8adf8e6e-67b2-4cf2-a259-e3dc5476c621. Token wygenerowany przez identyfikator Entra firmy Microsoft powinien być używany tylko do testowania. Nie należy jej używać w środowiskach produkcyjnych.

W przykładowym kodzie żądania są uwierzytelniane przy użyciu pakietu Microsoft.AspNetCore.Authentication.JwtBearer. Poniższy kod wymusza, że żądania do dowolnego z punktów końcowych usługi są uwierzytelniane przy użyciu tokenu elementu nośnego wystawionego przez identyfikator Entra firmy Microsoft dla określonej dzierżawy:

public void ConfigureServices(IServiceCollection services)
{
    if (_env.IsDevelopment())
    {
        ...
    }
    else
    {
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
            .AddJwtBearer(options =>
            {
                options.Authority = " https://sts.windows.net/12345678-0000-0000-0000-000000000000/";
                options.Audience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621";
                ...
            });
    }
    ...
}

public void Configure(IApplicationBuilder app)
{
    ...
    app.UseAuthentication();
    app.UseAuthorization();
    ...
}

Token elementu nośnego jest również wymagany do korzystania z podanych testów Postman i przeprowadzania lokalnego debugowania przy użyciu hosta lokalnego. Przykładowy kod używa środowisk ASP.NET Core, aby zmienić opcje uwierzytelniania podczas etapu programowania i włączyć używanie tokenu z podpisem własnym.

Aby uzyskać więcej informacji na temat wielu środowisk w środowisku ASP.NET Core, zobacz Używanie wielu środowisk w programie ASP.NET Core.

Poniższy kod wymusza, że żądania do dowolnego z punktów końcowych usługi są uwierzytelniane przy użyciu tokenu elementu nośnego podpisanego przy użyciu klucza niestandardowego:

public void ConfigureServices(IServiceCollection services)
{
    if (_env.IsDevelopment())
    {
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters =
                new TokenValidationParameters
                {
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    ValidateLifetime = false,
                    ValidateIssuerSigningKey = false,
                    ValidIssuer = "Microsoft.Security.Bearer",
                    ValidAudience = "Microsoft.Security.Bearer",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"))
                };
        });
    }
...

Wyślij żądanie GET do kontrolera tokenu, aby uzyskać prawidłowy token elementu nośnego. Metoda GenerateJSONWebToken jest odpowiedzialna za utworzenie tokenu pasującego do parametrów skonfigurowanych do programowania:

private string GenerateJSONWebToken()
{
    // Create token key
    SymmetricSecurityKey securityKey =
        new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A1B2C3D4E5F6A1B2C3D4E5F6"));
    SigningCredentials credentials =
        new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    // Set token expiration
    DateTime startTime = DateTime.UtcNow;
    DateTime expiryTime = startTime.AddMinutes(120);

    // Generate the token
    JwtSecurityToken token =
        new JwtSecurityToken(
            "Microsoft.Security.Bearer",
            "Microsoft.Security.Bearer",
            null,
            notBefore: startTime,
            expires: expiryTime,
            signingCredentials: credentials);

    string result = new JwtSecurityTokenHandler().WriteToken(token);
    return result;
}

Obsługa aprowizacji i anulowania aprowizacji użytkowników

Przykład 1. Wykonywanie zapytań względem usługi dla pasującego użytkownika

Microsoft Entra ID wysyła zapytanie do usługi dla użytkownika z wartością atrybutu zgodną externalId z wartością atrybutu mailNickname użytkownika w identyfikatorze Entra firmy Microsoft. Zapytanie jest wyrażane jako żądanie protokołu HTTP (Hypertext Transfer Protocol), takie jak w tym przykładzie, gdziein jyoung jest przykładem mailNickname użytkownika w usłudze Microsoft Entra ID.

Uwaga

Jest to tylko przykład. Nie wszyscy użytkownicy będą mieć atrybut mailNickname, a wartość, która ma użytkownik, może nie być unikatowa w katalogu. Ponadto atrybut używany do dopasowywania (w tym przypadku externalId) można skonfigurować w mapowaniach atrybutów Entra firmy Microsoft.

GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
 Authorization: Bearer ...

W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody QueryAsync dostawcy usługi. Oto podpis tej metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource is defined in 
// Microsoft.SCIM.Schemas.  
// Microsoft.SCIM.IQueryParameters is defined in 
// Microsoft.SCIM.Protocol.  

Task<Resource[]> QueryAsync(IRequest<IQueryParameters> request);

W przykładowym zapytaniu dla użytkownika z daną wartością atrybutu externalId wartości argumentów przekazanych do metody QueryAsync są następujące:

  • Parametry. AlternateFilters.Count: 1
  • Parametry. AlternateFilters.ElementAt(0). AttributePath: "externalId"
  • Parametry. AlternateFilters.ElementAt(0). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(0). ComparisonValue: "jyoung"

Przykład 2. Aprowizuj użytkownika

Jeśli odpowiedź na zapytanie do punktu końcowego SCIM dla użytkownika z wartością atrybutu zgodną z wartością externalId atrybutu mailNickname użytkownika nie zwraca żadnych użytkowników, identyfikator Entra firmy Microsoft żąda, aby usługa aprowizować użytkownika odpowiadającego temu identyfikatorowi w usłudze Microsoft Entra ID. Oto przykład takiego żądania:

POST https://.../scim/Users HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
   "schemas":
   [
     "urn:ietf:params:scim:schemas:core:2.0:User",
     "urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
   "externalId":"jyoung",
   "userName":"jyoung@testuser.com",
   "active":true,
   "addresses":null,
   "displayName":"Joy Young",
   "emails": [
     {
       "type":"work",
       "value":"jyoung@Contoso.com",
       "primary":true}],
   "meta": {
     "resourceType":"User"},
    "name":{
     "familyName":"Young",
     "givenName":"Joy"},
   "phoneNumbers":null,
   "preferredLanguage":null,
   "title":null,
   "department":null,
   "manager":null}

W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody CreateAsync dostawcy usługi. Oto podpis tej metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource is defined in 
// Microsoft.SCIM.Schemas.  

Task<Resource> CreateAsync(IRequest<Resource> request);

W żądaniu aprowizacji użytkowników wartość argumentu zasobu jest wystąpieniem Microsoft.SCIM.Core2EnterpriseUser klasy. Ta klasa jest zdefiniowana w bibliotece Microsoft.SCIM.Schemas . Jeśli żądanie aprowizacji użytkownika powiedzie się, oczekuje się, że implementacja metody zwróci wystąpienie Microsoft.SCIM.Core2EnterpriseUser klasy. Wartość Identifier właściwości jest ustawiona na unikatowy identyfikator nowo aprowizowanego użytkownika.

Przykład 3. Wykonywanie zapytań względem bieżącego stanu użytkownika

Identyfikator Entra firmy Microsoft żąda bieżącego stanu określonego użytkownika z usługi z żądaniem, takim jak:

GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody RetrieveAsync dostawcy usługi. Oto podpis tej metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.Resource and 
// Microsoft.SCIM.IResourceRetrievalParameters 
// are defined in Microsoft.SCIM.Schemas 

Task<Resource> RetrieveAsync(IRequest<IResourceRetrievalParameters> request);

W przykładzie żądania, aby pobrać bieżący stan użytkownika, wartości właściwości obiektu podane jako wartość argumentu parametrów są następujące:

  • Identyfikator: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • SchemaIdentifier: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

Przykład 4. Wykonywanie zapytań dotyczących wartości atrybutu odwołania, który ma zostać zaktualizowany

Microsoft Entra ID sprawdza bieżącą wartość atrybutu w magazynie tożsamości przed zaktualizowaniem. Jednak tylko atrybut menedżera jest sprawdzany jako pierwszy dla użytkowników. Oto przykład żądania w celu określenia, czy atrybut menedżera obiektu użytkownika ma obecnie określoną wartość: W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody QueryAsync dostawcy usługi. Wartość właściwości obiektu podanego jako wartość argumentu parametrów jest następująca:

  • Parametry. AlternateFilters.Count: 2
  • Parametry. AlternateFilters.ElementAt(x). AttributePath: "ID"
  • Parametry. AlternateFilters.ElementAt(x). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(x). ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • Parametry. AlternateFilters.ElementAt(y). AttributePath: "manager"
  • Parametry. AlternateFilters.ElementAt(y). ComparisonOperator: ComparisonOperator.Equals
  • Parametry. AlternateFilter.ElementAt(y). ComparisonValue: "2819c223-7f76-453a-919d-413861904646"
  • Parametry. RequestedAttributePaths.ElementAt(0): "ID"
  • Parametry. SchemaIdentifier: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

Wartość indeksu x może być 0 i wartość indeksu y może być 1. Lub wartość x może być 1 i wartość y może być 0. Zależy to od kolejności wyrażeń parametru zapytania filtru.

Przykład 5. Żądanie od identyfikatora Entra firmy Microsoft do punktu końcowego SCIM w celu zaktualizowania użytkownika

Oto przykład żądania od firmy Microsoft Entra ID do punktu końcowego SCIM w celu zaktualizowania użytkownika:

PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...
Content-type: application/scim+json
{
    "schemas": 
    [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations":
    [
      {
        "op":"Add",
        "path":"manager",
        "value":
          [
            {
              "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
              "value":"2819c223-7f76-453a-919d-413861904646"}]}]}

W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody UpdateAsync dostawcy usługi. Oto podpis tej metody:

// System.Threading.Tasks.Tasks and 
// System.Collections.Generic.IReadOnlyCollection<T>  // are defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in
// Microsoft.SCIM.Service.
// Microsoft.SCIM.IPatch, 
// is defined in Microsoft.SCIM.Protocol. 

Task UpdateAsync(IRequest<IPatch> request);

W przykładzie żądania, aby zaktualizować użytkownika, obiekt podany jako wartość argumentu poprawki ma następujące wartości właściwości:

Argument Wartość
ResourceIdentifier.Identifier "54D382A4-2050-4C03-94D1-E769F1D15682"
ResourceIdentifier.SchemaIdentifier urn:ietf:params:scim:schemas:extension:enterprise:2.0:User
(PatchRequest as PatchRequest2).Operations.Count 1
(PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName OperationName.Add
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath Menedżer
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count 1
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference http://.../scim/Users/2819c223-7f76-453a-919d-413861904646
(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value 2819c223-7f76-453a-919d-413861904646

Przykład 6. Anulowanie aprowizacji użytkownika

Aby anulować aprowizowanie użytkownika z magazynu tożsamości frontowanego przez punkt końcowy SCIM, identyfikator Entra firmy Microsoft wysyła żądanie, takie jak:

DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
Authorization: Bearer ...

W przykładowym kodzie żądanie jest tłumaczone na wywołanie metody DeleteAsync dostawcy usługi. Oto podpis tej metody:

// System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
// Microsoft.SCIM.IRequest is defined in 
// Microsoft.SCIM.Service.  
// Microsoft.SCIM.IResourceIdentifier, 
// is defined in Microsoft.SCIM.Protocol. 

Task DeleteAsync(IRequest<IResourceIdentifier> request);

Obiekt podany jako wartość argumentu resourceIdentifier ma te wartości właściwości w przykładzie żądania anulowania aprowizacji użytkownika:

  • ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
  • ResourceIdentifier.SchemaIdentifier: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

Integrowanie punktu końcowego SCIM z usługą aprowizacji firmy Microsoft

Identyfikator Entra firmy Microsoft można skonfigurować tak, aby automatycznie aprowizować przypisanych użytkowników i grupy do aplikacji, które implementują określony profil protokołu SCIM 2.0. Szczegóły profilu opisano w artykule Omówienie implementacji protokołu SCIM firmy Microsoft.

Zapoznaj się z dostawcą aplikacji lub dokumentacją dostawcy aplikacji, aby uzyskać instrukcje zgodności z tymi wymaganiami.

Ważne

Implementacja rozwiązania Microsoft Entra SCIM jest oparta na usłudze aprowizacji użytkowników firmy Microsoft Entra, która jest zaprojektowana tak, aby stale synchronizować użytkowników między identyfikatorem Entra firmy Microsoft i aplikacją docelową oraz implementuje bardzo konkretny zestaw standardowych operacji. Ważne jest, aby zrozumieć te zachowania, aby zrozumieć zachowanie usługi aprowizacji firmy Microsoft. Aby uzyskać więcej informacji, zobacz sekcję Cykle aprowizacji: Początkowe i przyrostowe w temacie Jak działa aprowizacja.

Wprowadzenie

Napiwek

Kroki opisane w tym artykule mogą się nieznacznie różnić w zależności od portalu, od którego zaczynasz.

Aplikacje, które obsługują profil SCIM opisany w tym artykule, mogą być połączone z identyfikatorem Entra firmy Microsoft przy użyciu funkcji "aplikacja spoza galerii" w galerii aplikacji Microsoft Entra. Po nawiązaniu połączenia identyfikator Entra firmy Microsoft uruchamia proces synchronizacji. Proces jest uruchamiany co 40 minut. Proces wysyła zapytanie do punktu końcowego SCIM aplikacji dla przypisanych użytkowników i grup oraz tworzy lub modyfikuje je zgodnie ze szczegółami przypisania.

Aby połączyć aplikację, która obsługuje protokół SCIM:

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra jako co najmniej Administracja istrator aplikacji.

  2. Przejdź do aplikacji dla przedsiębiorstw usługi Identity>Applications>.

  3. Zostanie wyświetlona lista wszystkich skonfigurowanych aplikacji, w tym aplikacji dodanych z galerii.

  4. Wybierz pozycję + Nowa aplikacja>+ Utwórz własną aplikację.

  5. Wprowadź nazwę aplikacji, wybierz opcję "zintegruj dowolną inną aplikację, której nie znajdziesz w galerii", a następnie wybierz pozycję Dodaj , aby utworzyć obiekt aplikacji. Nowa aplikacja zostanie dodana do listy aplikacji dla przedsiębiorstw i zostanie otwarta na ekranie zarządzania aplikacjami.

    Poniższy zrzut ekranu przedstawia galerię aplikacji Microsoft Entra:

    Screenshot shows the Microsoft Entra application gallery.

  6. Na ekranie zarządzania aplikacjami wybierz pozycję Aprowizowanie w panelu po lewej stronie.

  7. W menu Tryb aprowizacji wybierz pozycję Automatyczne.

    Poniższy zrzut ekranu przedstawia konfigurowanie ustawień aprowizacji w centrum administracyjnym firmy Microsoft Entra:

    Screenshot of app provisioning page in the Microsoft Entra admin center.

  8. W polu Adres URL dzierżawy wprowadź adres URL punktu końcowego SCIM aplikacji. Przykład: https://api.contoso.com/scim/

  9. Jeśli punkt końcowy SCIM wymaga tokenu elementu nośnego OAuth od wystawcy innego niż identyfikator Entra firmy Microsoft, skopiuj wymagany token elementu nośnego OAuth do opcjonalnego pola Token tajny. Jeśli to pole pozostanie puste, identyfikator Entra firmy Microsoft zawiera token elementu nośnego OAuth wystawiony z identyfikatora Entra firmy Microsoft z każdym żądaniem. Aplikacje korzystające z identyfikatora Entra firmy Microsoft jako dostawcy tożsamości mogą zweryfikować ten token wystawiony przez identyfikator Entra firmy Microsoft.

    Uwaga

    Nie zaleca się pozostawienia tego pola pustego i polegania na tokenie wygenerowanym przez identyfikator Firmy Microsoft Entra. Ta opcja jest dostępna głównie do celów testowych.

  10. Wybierz pozycję Test Połączenie ion, aby identyfikator Entra firmy Microsoft próbował nawiązać połączenie z punktem końcowym SCIM. Jeśli próba nie powiedzie się, zostaną wyświetlone informacje o błędzie.

    Uwaga

    Test Połączenie ion wysyła zapytanie do punktu końcowego SCIM dla użytkownika, który nie istnieje, używając losowego identyfikatora GUID jako pasującej właściwości wybranej w konfiguracji firmy Microsoft Entra. Oczekiwana prawidłowa odpowiedź to HTTP 200 OK z pustym komunikatem SCIM ListResponse.

  11. Jeśli próba nawiązania połączenia z aplikacją powiedzie się, wybierz pozycję Zapisz , aby zapisać poświadczenia administratora.

  12. W sekcji Mapowania istnieją dwa możliwe do wyboru zestawy mapowań atrybutów: jeden dla obiektów użytkownika i jeden dla obiektów grupy. Wybierz każdy z nich, aby przejrzeć atrybuty synchronizowane z identyfikatora Entra firmy Microsoft do aplikacji. Atrybuty wybrane jako Pasujące właściwości są używane do dopasowania użytkowników i grup w aplikacji do operacji aktualizacji. Wybierz pozycję Zapisz , aby zatwierdzić wszelkie zmiany.

    Uwaga

    Opcjonalnie można wyłączyć synchronizację obiektów grupy, wyłączając mapowanie "grup".

  13. W obszarze Ustawienia pole Zakres określa, którzy użytkownicy i grupy są synchronizowani. Wybierz pozycję Synchronizuj tylko przypisanych użytkowników i grup (zalecane), aby zsynchronizować tylko użytkowników i grupy przypisane na karcie Użytkownicy i grupy .

  14. Po zakończeniu konfiguracji ustaw wartość Stan aprowizacji na .

  15. Wybierz pozycję Zapisz , aby uruchomić usługę aprowizacji firmy Microsoft.

  16. W przypadku synchronizowania tylko przypisanych użytkowników i grup (zalecane) wybierz kartę Użytkownicy i grupy . Następnie przypisz użytkowników lub grupy, które chcesz zsynchronizować.

Po rozpoczęciu cyklu początkowego możesz wybrać pozycję Dzienniki aprowizacji w panelu po lewej stronie, aby monitorować postęp, co pokazuje wszystkie akcje wykonywane przez usługę aprowizacji w aplikacji. Aby uzyskać więcej informacji na temat sposobu odczytywania dzienników aprowizacji firmy Microsoft, zobacz Raportowanie automatycznej aprowizacji konta użytkownika.

Uwaga

Cykl początkowy trwa dłużej niż późniejsza synchronizacja, która występuje co około 40 minut, o ile usługa jest uruchomiona.

Jeśli tworzysz aplikację używaną przez więcej niż jedną dzierżawę, udostępnij ją w galerii aplikacji Microsoft Entra. Organizacje mogą łatwo odnajdywać aplikację i konfigurować aprowizację. Publikowanie aplikacji w galerii Microsoft Entra i udostępnianie aprowizacji innym osobom jest łatwe. Zapoznaj się z krokami tutaj. Firma Microsoft współpracuje z Tobą w celu zintegrowania aplikacji z galerią, przetestowania punktu końcowego i wydania dokumentacji dołączania dla klientów.

Użyj listy kontrolnej, aby szybko dołączyć aplikację, a klienci mają bezproblemowe środowisko wdrażania. Informacje te są zbierane podczas dołączania do galerii.

  • Obsługa punktu końcowego użytkownika i grupy SCIM 2.0 (wymagane jest tylko jedno, ale obie są zalecane)
  • Obsługa co najmniej 25 żądań na sekundę na dzierżawę w celu zapewnienia, że użytkownicy i grupy są aprowizowani i co najmniej 25 żądań na sekundę (wymagane)
  • Ustanów kontakty inżynieryjne i pomocy technicznej, aby umożliwić klientom publikowanie w galerii dołączania (wymagane)
  • 3 Nie wygasające poświadczenia testowe dla aplikacji (wymagane)
  • Obsługa udzielenia kodu autoryzacji OAuth lub długotrwałego tokenu zgodnie z opisem w przykładzie (wymagane)
  • Aplikacje OIDC muszą mieć zdefiniowaną co najmniej 1 rolę (niestandardową lub domyślną)
  • Ustanów punkt pomocy technicznej i inżynieryjny w celu uzyskania pomocy technicznej dla klientów korzystających z dołączania do galerii (wymagane)
  • Obsługa odnajdywania schematów (wymagane)
  • Obsługa aktualizowania wielu członkostw w grupach przy użyciu pojedynczej poprawki
  • Dokumentowanie punktu końcowego SCIM publicznie

Specyfikacja SCIM nie definiuje schematu specyficznego dla standardu SCIM na potrzeby uwierzytelniania i autoryzacji i opiera się na użyciu istniejących standardów branżowych.

Metoda autoryzacji Plusy Minusy Pomoc techniczna
Nazwa użytkownika i hasło (niezalecane lub obsługiwane przez identyfikator Entra firmy Microsoft) Łatwe do zaimplementowania Niezabezpieczone — Twoje $word Pa$nie ma znaczenia Nieobsługiwane w przypadku nowych aplikacji z galerii ani aplikacji spoza galerii.
Długożytny token elementu nośnego Długotrwałe tokeny nie wymagają obecności użytkownika. Administratorzy mogą łatwo używać ich podczas konfigurowania aprowizacji. Długotrwałe tokeny mogą być trudne do udostępnienia administratorowi bez używania niezabezpieczonych metod, takich jak poczta e-mail. Obsługiwane w przypadku aplikacji z galerii i spoza galerii.
Udzielanie kodu autoryzacji OAuth Tokeny dostępu mają krótszy okres życia niż hasła i mają zautomatyzowany mechanizm odświeżania, którego nie mają długotrwałe tokeny elementu nośnego. Rzeczywisty użytkownik musi być obecny podczas początkowej autoryzacji, dodając poziom odpowiedzialności. Wymaga obecności użytkownika. Jeśli użytkownik opuści organizację, token jest nieprawidłowy, a autoryzacja musi zostać ukończona ponownie. Obsługiwane w przypadku aplikacji z galerii, ale nie aplikacji spoza galerii. Można jednak podać token dostępu w interfejsie użytkownika jako token tajny na potrzeby testowania krótkoterminowego. Obsługa udzielania kodu OAuth w przypadku spoza galerii znajduje się na naszej liście prac, oprócz obsługi konfigurowalnych adresów URL uwierzytelniania/tokenu w aplikacji galerii.
Udzielanie poświadczeń klienta OAuth Tokeny dostępu mają krótszy okres życia niż hasła i mają zautomatyzowany mechanizm odświeżania, którego nie mają długotrwałe tokeny elementu nośnego. Zarówno udziel kod autoryzacji, jak i poświadczenia klienta przyznają tworzenie tego samego typu tokenu dostępu, więc przenoszenie między tymi metodami jest niewidoczne dla interfejsu API. Aprowizacja może być zautomatyzowana, a nowe tokeny mogą być dyskretnie żądane bez interakcji z użytkownikiem. Obsługiwane w przypadku aplikacji z galerii, ale nie aplikacji spoza galerii. Można jednak podać token dostępu w interfejsie użytkownika jako token tajny na potrzeby testowania krótkoterminowego. Obsługa udzielania poświadczeń klienta OAuth w przypadku spoza galerii znajduje się na naszej liście prac.

Uwaga

Nie zaleca się pozostawienia pustego pola tokenu w interfejsie użytkownika niestandardowej aplikacji konfiguracji aprowizacji firmy Microsoft. Wygenerowany token jest dostępny głównie do celów testowych.

Przepływ udzielania kodu OAuth

Usługa aprowizacji obsługuje udzielanie kodu autoryzacji i po przesłaniu żądania opublikowania aplikacji w galerii nasz zespół będzie współpracować z Tobą w celu zebrania następujących informacji:

  • Adres URL autoryzacji, adres URL klienta umożliwiający uzyskanie autoryzacji od właściciela zasobu za pośrednictwem przekierowania agenta użytkownika. Użytkownik jest przekierowywany do tego adresu URL w celu autoryzowania dostępu.

  • Adres URL wymiany tokenów, adres URL klienta umożliwiający wymianę udzielenia autoryzacji dla tokenu dostępu, zazwyczaj z uwierzytelnianiem klienta.

  • Identyfikator klienta, serwer autoryzacji wystawia zarejestrowanego klienta identyfikator klienta, który jest unikatowym ciągiem reprezentującym informacje o rejestracji dostarczone przez klienta. Identyfikator klienta nie jest wpisem tajnym; jest on udostępniany właścicielowi zasobu i nie może być używany tylko do uwierzytelniania klienta.

  • Wpis tajny klienta, wpis tajny wygenerowany przez serwer autoryzacji, który powinien być unikatową wartością znaną tylko serwerowi autoryzacji.

Uwaga

Adres URL autoryzacji i adres URL wymiany tokenów nie można obecnie konfigurować dla dzierżawy.

Uwaga

Protokół OAuth w wersji 1 nie jest obsługiwany z powodu ujawnienia wpisu tajnego klienta. Protokół OAuth w wersji 2 jest obsługiwany.

Zaleca się, ale nie jest to wymagane, aby umożliwić łatwe odnawianie wielu wpisów tajnych bez przestojów.

Jak skonfigurować przepływ udzielania kodu OAuth

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra jako co najmniej Administracja istrator aplikacji.

  2. Przejdź do pozycji Identity>Applications Enterprise Applications>Application Provisioning (Aprowizowanie aplikacji>>dla przedsiębiorstw) i wybierz pozycję Authorize (Autoryzuj).

  3. Zaloguj się do centrum administracyjnego firmy Microsoft Entra jako co najmniej Administracja istrator aplikacji.

  4. Przejdź do aplikacji dla przedsiębiorstw usługi Identity>Applications>.

  5. Wybierz aplikację i przejdź do pozycji Aprowizacja.

  6. Wybierz pozycję Autoryzuj.

    1. Użytkownicy są przekierowywani do adresu URL autoryzacji (strona logowania dla aplikacji innej firmy).

    2. Administracja dostarcza poświadczenia do aplikacji innej firmy.

    3. Aplikacja innej firmy przekierowuje użytkownika z powrotem i udostępnia kod udzielania

    4. Usługa Aprowizacji wywołuje adres URL tokenu i udostępnia kod udzielania. Aplikacja innej firmy odpowiada za pomocą tokenu dostępu, tokenu odświeżania i daty wygaśnięcia

  7. Po rozpoczęciu cyklu aprowizacji usługa sprawdza, czy bieżący token dostępu jest prawidłowy i w razie potrzeby wymienia go na nowy token. Token dostępu jest udostępniany w każdym żądaniu przekazanym do aplikacji, a ważność żądania jest sprawdzana przed każdym żądaniem.

Uwaga

Chociaż nie można skonfigurować uwierzytelniania OAuth w aplikacjach spoza galerii, możesz ręcznie wygenerować token dostępu z serwera autoryzacji i wprowadzić go jako token tajny do aplikacji spoza galerii. Dzięki temu można sprawdzić zgodność serwera SCIM z usługą aprowizacji firmy Microsoft przed dołączenia do galerii aplikacji, która obsługuje udzielanie kodu OAuth.

Długotrwałe tokeny elementu nośnego OAuth: jeśli aplikacja nie obsługuje przepływu udzielania kodu autoryzacji OAuth, zamiast tego wygeneruj długotrwały token elementu nośnego OAuth, którego administrator może użyć do skonfigurowania integracji aprowizacji. Token powinien być bezterminowy lub w przeciwnym razie zadanie aprowizacji jest poddane kwarantannie po wygaśnięciu tokenu.

Aby uzyskać więcej metod uwierzytelniania i autoryzacji, poinformuj nas o usłudze UserVoice.

Aby zwiększyć świadomość i zapotrzebowanie na wspólną integrację, zalecamy zaktualizowanie istniejącej dokumentacji i rozszerzenie integracji w kanałach marketingowych. Zalecamy wykonanie następującej listy kontrolnej w celu obsługi uruchamiania:

  • Upewnij się, że zespoły ds. sprzedaży i obsługi klienta są świadome, gotowe i mogą rozmawiać z możliwościami integracji. Pokróć swoje zespoły, podaj im często zadawane pytania i uwzględnij integrację z materiałami sprzedażowymi.
  • Utwórz wpis w blogu lub komunikat prasowy, który opisuje wspólną integrację, korzyści i sposób rozpoczęcia pracy. Przykład: Imprivata i Microsoft Entra Press Release
  • Korzystaj z mediów społecznościowych, takich jak Twitter, Facebook lub LinkedIn, aby promować integrację z klientami. Pamiętaj, aby dołączyć @Microsoft identyfikator Entra, abyśmy mogli retweetować post. Przykład: Imprivata Twitter Post
  • Utwórz lub zaktualizuj strony marketingowe/witrynę internetową (np. stronę integracji, stronę partnera, stronę cennika itp.), aby uwzględnić dostępność wspólnej integracji. Przykład: strona integracji pingboard, strona integracji usługi Smartsheet, strona z cennikiem Monday.com
  • Utwórz artykuł centrum pomocy lub dokumentację techniczną dotyczącą tego, jak klienci mogą rozpocząć pracę. Przykład: Integracja aplikacji Envoy + Microsoft Entra.
  • Ostrzegaj klientów o nowej integracji za pośrednictwem komunikacji klienta (comiesięczne biuletyny, kampanie e-mail, informacje o wersji produktu).

Następne kroki