0

OpenIDログインにサードパーティ プロバイダを使用する「証明書利用者」アプリが動作しています。ただし、 を使用する「自作」OpenIDプロバイダでログインしようとすると、 と の間でorg.openid4java.server.SampleServerセッションが維持されません。beginConsumptionendConsumption

発見と関連付けが成功したことがわかります。これは春に達成されOpenID4JavaConsumerます。

DiscoveryInformation information = consumerManager.associate(discoveries);
req.getSession().setAttribute(DISCOVERY_INFO_KEY, information);

しかし、OP が認証response.sendRedirectを行って RP に戻った後、そこで新しいセッションが開始され、次の場所で失敗しOpenID4JavaConsumer.endConsumptionます。

DiscoveryInformation discovered = 
    (DiscoveryInformation) request.getSession().getAttribute(DISCOVERY_INFO_KEY);

if (discovered == null) {
    throw new OpenIDConsumerException("DiscoveryInformation is not available. Possible causes are lost session or replay attack");
}

この新しいセッションが作成される原因と、古いセッションを維持するにはどうすればよいですか?

4

1 に答える 1

0

OPコードでこれを使用して、これを乗り越えることができました:

Cookie sessionCookie = getSessionCookie(request.getCookies());
if (sessionCookie != null) {
    response.addCookie(sessionCookie);
}
String url = response.encodeRedirectURL(responseBody);
response.sendRedirect(url);

private Cookie getSessionCookie(Cookie[] cookies) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equalsIgnoreCase("JSESSIONID")) {
            return cookie;
        }
    }
    return null;
}

表面的にはこれは理にかなっていますが、OpenId SampleServer クラスまたはドキュメントでこれが必要になる可能性について言及されていないことは不思議に感じられます。先に...

于 2014-09-16T11:01:10.310 に答える