日時 | |
関係者(共同研究者) | |
差分-Shibboleth IdP (2.0.0 - 2.1.2; StoredIDDataConnector)
国立情報学研究所1)の山地先生にShibbolethのソースコードの管理ページを教えていただき、Shibboleth IdP 2.0.0 を2.1.2にバージョンアップした2)ときに、StoredIDのフォーマット(生成方法も含む)が変わった原因を調査してみた。Javaは詳しくないので、間違っているかもしれませんが、参考程度にメモっておきます。
edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.dataConnector.StoredIDDataConnector.PersistentIdEntry メソッドが変更なっていました。
do {
log.debug("Generated persistent ID was already assigned to another user, regenerating");
persistentId = UUID.randomUUID().toString();
} while (pidStore.getPersistentIdEntry(persistentId, false) != null);
が追加されているなぁ。
Shibboleth IdPのログにも、
DEBUG [edu.internet2.middleware.shibboleth.common.attribute.resolver.provid
er.dataConnector.StoredIDDataConnector:258] - Generated persistent ID was already assigned
to another user, regenerating
のが残っているな、DB空にしたのになぁ???
もしかして、JavaでDo { } while (式) 文を使うときは、最初の1ループは実行するという構文じゃないのかなぁ?
そうだとしたら、この行は常に実行されるから、正常動作ってことかなぁ?
原因はここくさいなぁ。あとは、仕様との問題だけなんで、ひとまず、様子を見てみよう。
〇Version 1.0.0
http://svn.middl…
〇Version 1.1.2
http://svn.middl…
〇Version 1.0.0
protected PersistentIdEntry createPersistentId(ShibbolethResolutionContext resolutionContext, String localId,
byte[] salt) throws SQLException {
PersistentIdEntry entry = pidStore.new PersistentIdEntry();
entry.setLocalEntityId(resolutionContext.getAttributeRequestContext().getLocalEntityId());
entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().getInboundMessageIssuer());
entry.setPrincipalName(resolutionContext.getAttributeRequestContext().getPrincipalName());
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().getLocalEntityId());
entry.setPeerEntityId(resolutionContext.getAttributeRequestContext().getInboundMessageIssuer());
entry.setPrincipalName(resolutionContext.getAttributeRequestContext().getPrincipalName());
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;
}
山地先生、アドバイスを頂き、ありがとうございます。
【関連講義】サイバーキャンパス「鷹山」,UPKI関係資料3)
西暦 | 令和 | 🔷 平成 | 🔷 昭和 | 🔷 大正 | 🔷 明治 |
---|---|---|---|---|---|
2004 | R-14 | H16 | S79 | T93 | M137 |
2005 | R-13 | H17 | S80 | T94 | M138 |
2006 | R-12 | H18 | S81 | T95 | M139 |
2007 | R-11 | H19 | S82 | T96 | M140 |
2008 | R-10 | H20 | S83 | T97 | M141 |
2009 | R-9 | H21 | S84 | T98 | M142 |
2010 | R-8 | H22 | S85 | T99 | M143 |
2011 | R-7 | H23 | S86 | T100 | M144 |
2012 | R-6 | H24 | S87 | T101 | M145 |
2013 | R-5 | H25 | S88 | T102 | M146 |
2014 | R-4 | H26 | S89 | T103 | M147 |