2015-08-27 7 views
0

В основной схеме SCIM имеется простой многозначный атрибут «фотографии», предназначенный для хранения URL-адресов фотографий пользователя.вернуть URL-адрес пользователя с помощью SCIM в UnboundID

В каталоге конфигурации UnboundID Data Store файл SCIM-resources.xml имеет следующий закомментированный под ресурсом пользователя:

<!-- Mapping must be defined to use this attribute 
<attribute name="photos" schema="urn:scim:schemas:core:1.0" 
      readOnly="false" required="false"> 
    <description>URL of photos of the User</description> 
    <simpleMultiValued childName="photo" dataType="string"> 
    <canonicalValue name="photo"/> 
    <canonicalValue name="thumbnail"/> 
    </simpleMultiValued> 
</attribute> 
--> 

Дальше в спецификации примера вывод:

"photos": [ 
    { 
    "value": "https://photos.example.com/profilephoto/72930000000Ccne/F", 
    "type": "photo" 
    }, 
    { 
    "value": "https://photos.example.com/profilephoto/72930000000Ccne/T", 
    "type": "thumbnail" 
    } 
], 

У меня есть записи пользователя с атрибутом jpegPhoto. Вопросы:

  1. У UnboundID уже есть конечная точка, определенная для доступа к этим фотографиям? Я не хочу, чтобы только закодированное двоичное строковое значение jpegPhoto
  2. Если такая конечная точка существует (или я ее создаю), нужно ли мне затем написать класс преобразования и ссылаться на нее в дочернем элементе <canonicalValue><subMapping>?

Если, как это сделать, документировано где-то, я не смог его найти.

Любое руководство оценено.

Грант

ответ

1

Поскольку атрибут фотографии SCIM ссылается на массив внешней URL-адреса на фотографии, вы можете создать виртуальный атрибут хранилища данных, которая отображает в SCIM на массив URL, которые ссылаются на размещаемый сервлет для извлечения фото). Отсутствует существующая конечная точка сервера для возврата атрибутов jpegPhoto из записи ldap, и вы сказали, что не хотите, чтобы двоичные данные, основанные на base64, через SCIM.

Расширение HTTP Servlet, которое возвращает фотографии, в идеале принимает те же учетные данные, что и пользователь SCIM для аутентификации, и выполняет поиск LDAP в качестве пользователя SCIM, который будет оценивать контроль доступа ACI для атрибута jpegPhoto, например.

GET https://server:8443/photosEndpoint/{entryUUID}[/attribute-option] 
Authorization: <scim user credentials> 

Поскольку jpegPhoto является атрибутом многозначным, если есть один (или первый, если многие) атрибуты jpegPhoto, это может вернуть IMG/JPEG контент-типа сущности. Похоже, вы пытаетесь выбрать из нескольких фотографий, используя квалификатор, например./F для полного размера? и/T для миниатюра, но нет никакого способа узнать, мульти-значения значения атрибутов друг от друга в LDAP без опции атрибут, е, г,

jpegPhoto returned via /photosEndpoint/{entryUUID} 
jpegPhoto;size=fullsize returned via /photosEndpoint/{entryUUID}[/fullsize | /F] 
jpegPhoto;size=thumbnail returned via /photosEndpoint/{entryUUID}[/thumbnail | /T] 

сервлет может также быть написан для обработки нескольких фотографий, возвращая их в многочастный MIME-ответ с jpegPhoto на часть. Названия деталей будут включать параметры атрибута, если они доступны. Один недостаток - такой ответ не будет отображаться легко в браузере.

В целом, это хорошая идея, но некоторые работы на практике. Поддержка UnboundID могла бы помочь.

+0

Спасибо, Ричард. Я не так сильно интересуюсь возвратом/выбором из нескольких фотографий (пока!), Но если бы существовала конечная точка и необходимые изменения для SCIM resources.xml. У меня есть кое-что работа, о котором я подробно расскажу ниже. – GBC

0

В качестве отправной точки я написал простой сервлет, чтобы вернуть первое значение jpegPhoto (если присутствует) в качестве изображения/png через запрос LDAP к uid.Затем я написал простой класс преобразования, чтобы вернуть соответствующий URL фотографии на основе UID:

import com.unboundid.asn1.ASN1OctetString; 
import com.unboundid.scim.schema.AttributeDescriptor; 
import com.unboundid.scim.sdk.SCIMAttributeValue; 
import com.unboundid.util.ByteString; 

public class PhotoTransform extends com.unboundid.scim.ldap.Transformation { 

@Override 
public String toLDAPFilterValue(String scimFilterValue) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public ASN1OctetString toLDAPValue(AttributeDescriptor descriptor, SCIMAttributeValue value) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public SCIMAttributeValue toSCIMValue(AttributeDescriptor descriptor, ByteString value) { 
    return SCIMAttributeValue.createStringValue("http://localhost:4567/photo/" + value.stringValue()); 
} 

Я тогда ссылается класс в resources.xml SCIM передавая идентификатор пользователя в качестве атрибута LDAP:

<attribute name="photos" schema="urn:scim:schemas:core:1.0" 
      readOnly="false" required="false"> 
    <description>URL of photos of the User</description> 
    <simpleMultiValued childName="photo" dataType="string"> 
    <canonicalValue name="photoUrl"> 
      <subMapping name="value" ldapAttribute="uid" 
        transform="com.example.scim.PhotoTransform"> 
      </subMapping> 
    </canonicalValue> 
    <canonicalValue name="thumbnail"/> 
    </simpleMultiValued> 
</attribute> 

и SCIM запрос (от эталонной реализации)

curl 'http://localhost:8080/Users?filter=userName%20eq%20%22jsmith%22' -u bjensen:password 

теперь возвращает:

{ 
"totalResults" : 1, 
"itemsPerPage" : 1, 
"startIndex" : 1, 
"schemas" : ["urn:scim:schemas:core:1.0", "urn:scim:schemas:extension:enterprise:1.0"], 
"Resources" : [{ 
     "name" : { 
      "formatted" : "Mr. John Smith", 
      "familyName" : "Smith", 
      "givenName" : "John" 
     }, 
     "phoneNumbers" : [{ 
       "value" : "tel:555-555-1256", 
       "type" : "work" 
      } 
     ], 
     "userName" : "jsmith", 
     "emails" : [{ 
       "value" : "[email protected]", 
       "type" : "work" 
      } 
     ], 
     "photos" : [{ 
       "value" : "http://localhost:4567/photo/jsmith", 
       "type" : "photoUrl" 
      } 
     ], 
     "id" : "fb4134dc-0a93-476a-964a-c29847f3bf79", 
     "meta" : { 
      "created" : "2015-09-09T00:17:12.768Z", 
      "lastModified" : "2015-09-09T00:17:12.768Z", 
      "location" : "http://localhost:8080/v1/Users/fb4134dc-0a93-476a-964a-c29847f3bf79", 
      "version" : "\"20150909001712.768Z\"" 
     } 
    }] 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^