[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:52] RE: [upki-fed:51] Re: [upki-fed:50] 【質問】Shibboleth IdP 2.1.2にしたらeduPersonTargetedIDのフォーマットが変わりますか?



山地先生

山形大学の伊藤です。
ご返事、ありがとうございます。

こんなところにコードがあったのですね。

なんとなーく、問題点がわかってきました。間違っているかも
しれませんので、詳しい方フォローしていただけると幸いです。
Javaは、勉強不足なものですから、間違っている可能性があります。

edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataC
onnector.StoredIDDataConnector.PersistentIdEntry

のメソッドが変更されたようです。

Version 1.1.2には、新たに、

        do {
            log.debug("Generated persistent ID was already assigned to
another user, regenerating");
            persistentId = UUID.randomUUID().toString();
        } while (pidStore.getPersistentIdEntry(persistentId, false) !=
null);

が追加されたようです。
開発者の意図としては、既に同じ、persistent IDがデータベースにあるときには、
新しいUUIDをランダムに生成するようにコーディングをしたのではないでしょうか?

ここからは、Javaのことが詳しくないので推測ですが、
JavaでDo { } while (式) 分を使うときは、
最初の1ループは実行するという構文ではないでしょうか?

ただ、この動作がShibboleth IdP 2.1.2の仕様で、全て、UUID.randowmUUIDを使用す
るということで
あれば、正常動作と判断します。LocalEntityId、PeerEntityId、LocalId, saltが同
一条件下で
生成してみると同じIDが生成されないようで、ちょっと、気になっていました。

以上。よろしくお願いします。

〇Version 1.0.0

protected PersistentIdEntry createPersistentId(ShibbolethResolutionContext
resolutionContext, String localId,
            byte[] salt) throws SQLException {
        PersistentIdEntry entry = pidStore.new PersistentIdEntry();

entry.setLocalEntityId(resolutionContext.getAttributeRequestContext().getLoc
alEntityId());

entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().getInbo
undMessageIssuer());

entry.setPrincipalName(resolutionContext.getAttributeRequestContext().getPri
ncipalName());
        entry.setLocalId(localId);

        String persisentId;
        int numberOfExistingEntries =
pidStore.getNumberOfPersistentIdEntries(entry.getLocalEntityId(), entry
                .getPeerEntityId(), entry.getLocalId());
        if (numberOfExistingEntries == 0) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(entry.getPeerEntityId().getBytes());
                md.update((byte) '!');
                md.update(localId.getBytes());
                md.update((byte) '!');
                persisentId = Base64.encodeBytes(md.digest(salt));
            } catch (NoSuchAlgorithmException e) {
                log.error("JVM error, SHA-1 is not supported, unable to
compute ID");
                throw new SQLException("SHA-1 is not supported, unable to
compute ID");
            }
        } else {
            persisentId = UUID.randomUUID().toString();
        }
        entry.setPersistentId(persisentId);

        entry.setCreationTime(new Timestamp(System.currentTimeMillis()));

        return entry;
    }

〇Version 1.1.2
protected PersistentIdEntry createPersistentId(ShibbolethResolutionContext
resolutionContext, String localId,
            byte[] salt) throws SQLException {
        PersistentIdEntry entry = pidStore.new PersistentIdEntry();

entry.setLocalEntityId(resolutionContext.getAttributeRequestContext().getLoc
alEntityId());

entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().getInbo
undMessageIssuer());

entry.setPrincipalName(resolutionContext.getAttributeRequestContext().getPri
ncipalName());
        entry.setLocalId(localId);

        String persistentId;
        int numberOfExistingEntries =
pidStore.getNumberOfPersistentIdEntries(entry.getLocalEntityId(), entry
                .getPeerEntityId(), entry.getLocalId());
        if (numberOfExistingEntries == 0) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(entry.getPeerEntityId().getBytes());
                md.update((byte) '!');
                md.update(localId.getBytes());
                md.update((byte) '!');
                persistentId = Base64.encodeBytes(md.digest(salt));
            } catch (NoSuchAlgorithmException e) {
                log.error("JVM error, SHA-1 is not supported, unable to
compute ID");
                throw new SQLException("SHA-1 is not supported, unable to
compute ID");
            }
        } else {
            persistentId = UUID.randomUUID().toString();
        }

        do {
            log.debug("Generated persistent ID was already assigned to
another user, regenerating");
            persistentId = UUID.randomUUID().toString();
        } while (pidStore.getPersistentIdEntry(persistentId, false) !=
null);

        entry.setPersistentId(persistentId);

        entry.setCreationTime(new Timestamp(System.currentTimeMillis()));

        return entry;
    }

> -----Original Message-----
> From: xxxxxxxxxxxxxx@xxxxxxxxx [mailto:xxxxxxxxxxxxxx@xxxxxxxxx] On
> Behalf Of xxxxxx@xxxxxxxxx
> Sent: Thursday, August 20, 2009 12:16 AM
> To: xxxxxxxx@xxxxxxxxx
> Subject: [upki-fed:51] Re: [upki-fed:50] 【質問】Shibboleth IdP 2.1.2
> にしたらeduPersonTargetedIDのフォーマットが変わりますか?
>
> ** On Wed, 19 Aug 2009 19:44:09 +0900
> ** Tomohiro Ito <xxxxxxxx@xxxxxxxxxxxxxxxxxxx> writes:
>
> > Shibboleth IdP 2.1.2にしたら、eduPersonTargetedIDのフォーマットが、
> >
> > 0b000ab7-2fa7-4ebf-b387-fdd63dc15cf6
>
> StoreするIDのフォーマット自体が違ったということですか?
> ということであれば,
>
> http://svn.middleware.georgetown.edu/view/java-shib-common/tags/1.0.0/
> src/edu/internet2/middleware/shibboleth/common/attribute/resolver/prov
> ider/dataConnector/StoredIDStore.java?view=log
> と
> http://svn.middleware.georgetown.edu/view/java-shib-common/tags/1.1.2/
> src/main/java/edu/internet2/middleware/shibboleth/common/attribute/res
> olver/provider/dataConnector/StoredIDStore.java?view=log
>
> あたりを比較したら違いがありますか?
> --
> Kazu

Attachment: smime.p7s
Description: S/MIME cryptographic signature