山地先生
山形大学の伊藤です。
ご返事、ありがとうございます。
こんなところにコードがあったのですね。
なんとなーく、問題点がわかってきました。間違っているかも
しれませんので、詳しい方フォローしていただけると幸いです。
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
>
> あたりを比較したら違いがありますか?
> --
> KazuAttachment:
smime.p7s
Description: S/MIME cryptographic signature