サーバ側でApache Shindigのモジュールを使用し、securityTokenを作成してみた。
正しいかどうかは知らない。
String viewerId = "viewer";
String ownerId = "owner";
String domain = "shindig";
String container = "default";
long moduleId = 0;
String appId = "http://www.labpixies.com/campaigns/todo/todo.xml";
String securityToken = null;
try {
String keyFile = containerConfig.getString(container, "gadgets.securityTokenKeyFile");
if (keyFile != null) {
BlobCrypterSecurityToken token = new BlobCrypterSecurityToken(new BasicBlobCrypter(new java.io.File(keyFile)), container, domain);
token.setOwnerId(ownerId);
token.setViewerId(viewerId);
token.setAppUrl(appId);
token.setModuleId(moduleId);
token.setActiveUrl(request.getRequestURL().toString());
securityToken = token.encrypt();
}
else {
BasicSecurityToken token = new BasicSecurityToken(
ownerId,
viewerId,
appId,
domain,
appId,
"" + moduleId,
container,
request.getRequestURL().toString());
securityToken = token.toSerialForm();
}
}
catch (Exception ex) {
AnonymousSecurityToken token = new AnonymousSecurityToken();
securityToken = token.toSerialForm();
}
securityToken = URLEncoder.encode(securityToken, "UTF-8");
もっとちゃんと実装しなきゃならないけど、
おおまかな流れ的には、こんな感じでよい気がする。
activeUrlには何を指定するか、まだ知らないんで、とりあえずリクエストURLを指定した。
で、とりあえず動いた。
AuthenticationServletFilterもちゃんと通過。
iframeには意味不明な文字列が指定されている。
securityTokenには'+'とかが入るので、処理の最後でURLEncoder.encodeしてやらないと
だめ。(ちろっとはまった)
iframeのsecurityTokenをでたらめな文字列を指定すると、ちゃんと403になる。
うーん。
AuthenticationServletFilterでやっている処理は、
FilterじゃなくてHandlerでやった方がいじりやすい気もする。
--
というか、SecurityTokenDecoderはShindigにあるのに、SecurityTokenEncoderはShindigには
用意されていない。BlobCrypterがあるので、いらない、ということかな?
SecurityTokenDecoderも含めて、Shindigはサンプルだから自分で実装しろ、ということか。。
.
0 コメント:
コメントを投稿