- При настройке аутентификации OpenID connect через MS Azure AD возникли некоторые нюансы, которые возникают при настройке по статье с ИТС:
{ "name": "azure_oidc", "title": "OIDC 1C (Azure)", "discovery": "https://login.microsoftonline.com/*******-****-****-****-********/v2.0/.well-known/openid-configuration", "authenticationClaimName": "upn", "clientconfig": { "authority": "https://login.microsoftonline.com/*******-****-****-****-********", "client_id": "********-****-****-****-**********", "redirect_uri": "https://mydomain/testbasename/authform.html", "post_logout_redirect_uri": "https://mydomain/testbasename/exit.html", "endSessionEndpoint": "https://login.microsoftonline.com/********-****-****-****-**********/oauth2/v2.0/logout", "scope": "openid email", "response_type": "id_token token", "filterProtocolClaims": false, "loadUserInfo": false, "resource": "********-****-****-****-**********" } }
Здесь в ("authority": "https://login.microsoftonline.com/<tenant>/oauth2") необходимо заменить на ("authority": "https://login.microsoftonline.com/<tenant>",)
- Получение списка пользователей из Azure AD в 1С:
Function GetAzureData() Table = New ValueTable; client_id = "********-****-****-****-**********"; client_secret = "W_FBbaYsaxvhyJcVtVINCYdj2r_wNrff8Q~7sREg"; tenant_id = "********-****-****-****-**********"; grant_type = "client_credentials"; server = "login.microsoftonline.com"; url = "/" + tenant_id +"/oauth2/v2.0/token"; scope = "https://graph.microsoft.com/.default"; payload = "grant_type=" + grant_type + "&client_id=" + client_id + "&client_secret=" + client_secret + "&scope=" + scope; headers = "{'Content-Type': 'application/x-www-form-urlencoded'}"; HTTPRequest = New HTTPRequest(url); HTTPRequest.SetBodyFromString(payload); HTTPRequest.Headers.Insert("Content-Type", "application/x-www-form-urlencoded"); ssl = New OpenSSLSecureConnection(); HTTPConnection = New HTTPConnection(server,,,,,100,ssl); ResponseHTTP = HTTPConnection.Post(HTTPRequest); If ResponseHTTP.StatusCode = 200 Then ResponseStruct = SimpleReadeJSON(ResponseHTTP.GetBodyAsString(TextEncoding.UTF8)); access_token = ResponseStruct.access_token; HTTPRequest = New HTTPRequest("/v1.0/users"); HTTPRequest.Headers.Insert("Authorization", "Bearer " + access_token); HTTPConnection = Новый HTTPConnection("graph.microsoft.com",,,,,100,ssl); ResponseHTTP = HTTPConnection.Get(HTTPRequest); ResponseStruct = SimpleReadeJSON(StrReplace(ResponseHTTP.GetBodyAsString(TextEncoding.UTF8),"@odata.context","odatacontext")); Table.Columns.Add("name"); Table.Columns.Add("mail"); Table.Columns.Add("title"); Table.Columns.Add("mobile"); Table.Columns.Add("department"); Table.Columns.Add("postOfficeBox"); Table.Columns.Add("company"); Table.Columns.Add("createTimestamp"); Table.Columns.Add("modifyTimestamp"); Table.Columns.Add("userAccountControl"); Table.Columns.Add("userPrincipalName"); Table.Columns.Add("displayName"); Table.Columns.Add("uSNCreated"); For Each item in ResponseStruct.Value Do Line = Table.Add(); Line.name = item.givenName; Line.mail = item.mail; Line.title = item.jobTitle; Line.mobile = item.mobilePhone; Line.department = item.officeLocation; Line.postOfficeBox = ""; Line.company = item.officeLocation; Line.createTimestamp = ""; Line.modifyTimestamp = ""; Line.userAccountControl = item.id; Line.uSNCreated = item.id; Line.userPrincipalName = item.userPrincipalName; Line.displayName = item.displayName; EndDo; Else //make error EndIf; Return Table; EndFunction Function SimpleReadeJSON(Data) JSONReader = New JSONReader; JSONReader.SetString(Data); Return ReadJSON(JSONReader); EndFunction
Здесь самым основным моментом является то, что в Azure там же, где и регистрировали приложение (см. статью с ИТС), нужно создать client_secret для этого приложения, а затем этому приложению нужно выдать права на "graph", где указать чтение данных пользователей.