标签: openid4java

如何或何时关注重定向的OpenID?

我目前正在为网站实施OpenID身份验证.在测试过程中,我注意到Google接受了不同版本的Google个人资料ID,例如:

有趣的是,验证的ID也不同(对于上面的样本,相同的顺序):

当然,这使得查找关联的用户帐户非常困难,更不用说不可能了.有趣的是,所有上述ID都适用于Stackoverflow.所以我认为在我的实现中我必须要有一些规范化步骤 - 或者做一些专门的伏都教来完成事情.

看看OpenID身份验证规范的7.2 Normatlization我发现了这个:

URL标识符必须在检索其内容时通过以下重定向进一步标准化,并最终将[RFC3986]的第6节中的规则应用于最终目标URL.该最终URL必须由依赖方记录为声明的标识符,并在请求认证时使用.

以下重定向声明的ID并没有多大帮助,因为我还有两个不同的ID:

查看已验证ID的重定向更有帮助,因为我总是最终得到这个:

好的,看起来我应该遵循经过验证的ID的重定向,而不是声明的ID.

现在的问题是:遵循声明/验证ID的重定向是否安全,例如在搜索DB之前如此:

do {
  user = lookup(verifiedId)
  if (user is null)
    response = fetchUrl(verifiedId)
    if (response.location is null) {
      break # no redirect, jump out of loop, unknown user
    } else {
      verifiedId = response.location # use redirect location
    }
} while (user is null)

return user;
Run Code Online (Sandbox Code Playgroud)

如果是的话,我怀疑这不仅应该在查找用户时进行,还应该在存储新ID时进行,对吧?

(如果我真的应该重定向,我还有另外一个关于潜在恶意重定向的问题,但是我必须等到我得到这个问题的答案.无论如何都可能过时了)

openid spring-security google-openid openid4java

11
推荐指数
1
解决办法
389
查看次数

Spring Security 3.0 Google Apps使用OpenID4Java登录ID

我尝试使用带有OpenID4Java库的Google Apps开放ID登录.

我在使用者类中使用以下代码发现用户的服务:


        try
        {
            discoveries = consumerManager.discover(identityUrl);
        }
        catch (DiscoveryException e)
        {
            throw new OpenIDConsumerException("Error during discovery", e);
        }

        DiscoveryInformation information = consumerManager.associate(discoveries);
        HttpSession session = req.getSession(true);
        session.setAttribute(DiscoveryInformation.class.getName(), information);
        AuthRequest authReq;

        try
        {
            authReq = consumerManager.authenticate(information, returnToUrl, realm);

            // check for OpenID Simple Registration request needed
            if (attributesByProvider != null || defaultAttributes != null) 
            {
                //I set the attributes needed for getting the email of the user
            }
        }
        catch (Exception e)
        {
            throw new OpenIDConsumerException("Error processing ConumerManager authentication", …
Run Code Online (Sandbox Code Playgroud)

java openid spring-security openid4java

7
推荐指数
1
解决办法
1682
查看次数

使用oauth访问Google帐户的备用电子邮件地址

Google帐户可以与多个电子邮件地址相关联.例如,abc @ yahoo.com可以是与Google帐户关联的电子邮件地址,但是如果用户具有Gmail设置,则Gmail地址将成为与该帐户关联的主要电子邮件地址.因此,在上述情况下,相关的Google帐户将以abc@gmail.com作为主要电子邮件地址; 和abc@yahoo.com以及abc@somenewcompany.com作为辅助电子邮件地址.

我希望使用abc@somenewcompany.com电子邮件地址对用户进行身份验证,但是通过Google OAuth生成的令牌并使用在https://www.googleapis.com/oauth2/v1/userinfo?access_token=generated-返回的JSON对象进行验证token仅返回主电子邮件地址.

有没有办法识别这个电子邮件地址?somenewcompany.com不是oauth提供商.

openid4java google-oauth

7
推荐指数
0
解决办法
239
查看次数