Skip to content

Commit 3a92740

Browse files
authored
Merge pull request #106116 from ArvindHarinder1/patch-89
Remove development section of SCIM doc
2 parents 8216881 + 6d247f2 commit 3a92740

File tree

1 file changed

+1
-156
lines changed

1 file changed

+1
-156
lines changed

articles/active-directory/app-provisioning/use-scim-to-provision-users-and-groups.md

Lines changed: 1 addition & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ TLS 1.2 Cipher Suites minimum bar:
757757
Now that you have desidned your schema and understood the Azure AD SCIM implementation, you can get started developing your SCIM endpoint. Rather than starting from scratch and building the implementation completely on your own, you can rely on a number of open source SCIM libraries published by the SCIM commuinty.
758758
The open source .NET Core [reference code](https://aka.ms/SCIMReferenceCode) published by the Azure AD provisioning team is one such resource that can jump start your development. Once you've built your SCIM endpoint, you'll want to test it out. You can use the collection of [postman tests](https://github.com/AzureAD/SCIMReferenceCode/wiki/Test-Your-SCIM-Endpoint) provided as part of the reference code or run through the sample requests / responses provided [above](https://docs.microsoft.com/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups#user-operations).
759759

760-
Here’s how it works:
760+
Here’s how it works:
761761

762762
1. Azure AD provides a common language infrastructure (CLI) library named Microsoft.SystemForCrossDomainIdentityManagement, included with the code samples describe below. System integrators and developers can use this library to create and deploy a SCIM-based web service endpoint that can connect Azure AD to any application’s identity store.
763763
2. Mappings are implemented in the web service to map the standardized user schema to the user schema and protocol required by the application.
@@ -822,7 +822,6 @@ The easiest way to implement a SCIM endpoint that can accept provisioning reques
822822
1. Once your configuration is complete, set the **Provisioning Status** to **On**.
823823
1. Select **Save** to start the Azure AD provisioning service.
824824
1. If syncing only assigned users and groups (recommended), be sure to select the **Users and groups** tab and assign the users or groups you want to sync.
825-
826825
Once the initial cycle has started, you can select **Audit logs** in the left panel to monitor progress, which shows all actions done by the provisioning service on your app. For more information on how to read the Azure AD provisioning logs, see [Reporting on automatic user account provisioning](check-status-user-account-provisioning.md).
827826

828827
The final step in verifying the sample is to open the TargetFile.csv file in the \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug folder on your Windows machine. Once the provisioning process is run, this file shows the details of all assigned and provisioned users and groups.
@@ -960,7 +959,6 @@ Requests from Azure Active Directory include an OAuth 2.0 bearer token. Any se
960959
> [!NOTE]
961960
> It's ***not*** recommended to leave this field blank and rely on a token generated by Azure AD. This option is primarily available for testing purposes.
962961
Developers using the CLI libraries provided by Microsoft for building a SCIM service can authenticate requests from Azure Active Directory using the Microsoft.Owin.Security.ActiveDirectory package by following these steps:
963-
964962
First, in a provider, implement the Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior property by having it return a method to be called whenever the service is started:
965963

966964
```csharp
@@ -1008,159 +1006,6 @@ Next, add the following code to that method to have any request to any of the se
10081006
}
10091007
```
10101008

1011-
### Handling provisioning and deprovisioning of users
1012-
1013-
***Example 1. Query the service for a matching user***
1014-
1015-
Azure Active Directory queries the service for a user with an externalId attribute value matching the mailNickname attribute value of a user in Azure AD. The query is expressed as a Hypertext Transfer Protocol (HTTP) request such as this example, wherein jyoung is a sample of a mailNickname of a user in Azure Active Directory.
1016-
1017-
>[!NOTE]
1018-
> This is an example only. Not all users will have a mailNickname attribute, and the value a user has may not be unique in the directory. Also, the attribute used for matching (which in this case is externalId) is configurable in the [Azure AD attribute mappings](customize-application-attributes.md).
1019-
```
1020-
GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
1021-
Authorization: Bearer ...
1022-
```
1023-
1024-
If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. Here is the signature of that method:
1025-
1026-
```csharp
1027-
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
1028-
// Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in
1029-
// Microsoft.SystemForCrossDomainIdentityManagement.Schemas.
1030-
// Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in
1031-
// Microsoft.SystemForCrossDomainIdentityManagement.Protocol.
1032-
System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]> Query(
1033-
Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters,
1034-
string correlationIdentifier);
1035-
```
1036-
1037-
Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:
1038-
1039-
```csharp
1040-
public interface IQueryParameters:
1041-
Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
1042-
{
1043-
System.Collections.Generic.IReadOnlyCollection <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters
1044-
{ get; }
1045-
}
1046-
public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
1047-
{
1048-
system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths
1049-
{ get; }
1050-
System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths
1051-
{ get; }
1052-
string SchemaIdentifier
1053-
{ get; }
1054-
}
1055-
```
1056-
1057-
```
1058-
GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
1059-
Authorization: Bearer ...
1060-
```
1061-
1062-
If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. Here is the signature of that method:
1063-
1064-
```csharp
1065-
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
1066-
// Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in
1067-
// Microsoft.SystemForCrossDomainIdentityManagement.Schemas.
1068-
// Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in
1069-
// Microsoft.SystemForCrossDomainIdentityManagement.Protocol.
1070-
System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]> Query(
1071-
Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters,
1072-
string correlationIdentifier);
1073-
```
1074-
1075-
Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:
1076-
1077-
```csharp
1078-
public interface IQueryParameters:
1079-
Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
1080-
{
1081-
System.Collections.Generic.IReadOnlyCollection <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters
1082-
{ get; }
1083-
}
1084-
public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
1085-
{
1086-
system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths
1087-
{ get; }
1088-
System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths
1089-
{ get; }
1090-
string SchemaIdentifier
1091-
{ get; }
1092-
}
1093-
public interface Microsoft.SystemForCrossDomainIdentityManagement.IFilter
1094-
{
1095-
Microsoft.SystemForCrossDomainIdentityManagement.IFilter AdditionalFilter
1096-
{ get; set; }
1097-
string AttributePath
1098-
{ get; }
1099-
Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator FilterOperator
1100-
{ get; }
1101-
string ComparisonValue
1102-
{ get; }
1103-
}
1104-
public enum Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator
1105-
{
1106-
Equals
1107-
}
1108-
```
1109-
1110-
In the following sample of a query for a user with a given value for the externalId attribute, values of the arguments passed to the Query method are:
1111-
* parameters.AlternateFilters.Count: 1
1112-
* parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"
1113-
* parameters.AlternateFilters.ElementAt(0).ComparisonOperator: ComparisonOperator.Equals
1114-
* parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"
1115-
* correlationIdentifier: System.Net.Http.HttpRequestMessage.GetOwinEnvironment["owin.RequestId"]
1116-
1117-
***Example 2. Provision a user***
1118-
1119-
If the response to a query to the web service for a user with an externalId attribute value that matches the mailNickname attribute value of a user doesn't return any users, then Azure Active Directory requests that the service provision a user corresponding to the one in Azure Active Directory. Here is an example of such a request:
1120-
1121-
```
1122-
POST https://.../scim/Users HTTP/1.1
1123-
Authorization: Bearer ...
1124-
Content-type: application/scim+json
1125-
{
1126-
"schemas":
1127-
[
1128-
"urn:ietf:params:scim:schemas:core:2.0:User",
1129-
"urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
1130-
"externalId":"jyoung",
1131-
"userName":"jyoung",
1132-
"active":true,
1133-
"addresses":null,
1134-
"displayName":"Joy Young",
1135-
"emails": [
1136-
{
1137-
"type":"work",
1138-
"value":"[email protected]",
1139-
"primary":true}],
1140-
"meta": {
1141-
"resourceType":"User"},
1142-
"name":{
1143-
"familyName":"Young",
1144-
"givenName":"Joy"},
1145-
"phoneNumbers":null,
1146-
"preferredLanguage":null,
1147-
"title":null,
1148-
"department":null,
1149-
"manager":null}
1150-
```
1151-
1152-
The CLI libraries provided by Microsoft for implementing SCIM services would translate that request into a call to the Create method of the service’s provider. The Create method has this signature:
1153-
1154-
```csharp
1155-
// System.Threading.Tasks.Tasks is defined in mscorlib.dll.
1156-
// Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in
1157-
// Microsoft.SystemForCrossDomainIdentityManagement.Schemas.
1158-
System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource> Create(
1159-
Microsoft.SystemForCrossDomainIdentityManagement.Resource resource,
1160-
string correlationIdentifier);
1161-
```
1162-
1163-
In a request to provision a user, the value of the resource argument is an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Core2EnterpriseUser class, defined in the Microsoft.SystemForCrossDomainIdentityManagement.Schemas library. If the request to provision the user succeeds, then the implementation of the method is expected to return an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Core2EnterpriseUser class, with the value of the Identifier property set to the unique identifier of the newly provisioned user.
11641009

11651010
## Step 4: Integrate your SCIM endpoint with the Azure AD SCIM client
11661011

0 commit comments

Comments
 (0)