代码之家  ›  专栏  ›  技术社区  ›  CMircea

使用OpenID作为唯一的身份验证方法

  •  9
  • CMircea  · 技术社区  · 15 年前

    怎样 去做,更不用说费心去做了。

    我现在有:

    Users:
    ------
    
    ID     Email              Etc.
    --     ---------------    ----
    0      bob@yahoo.com      ...
    1      alice@yahoo.com    ...
    
    UserOpenIDs:
    ------------
    
    ID     UserID     OpenID
    --     ------     ------
    0      0          0
    1      0          2
    2      1          1
    
    OpenIDs:
    --------
    
    ID     Provider   Identifier
    --     --------   ----------------
    0      Yahoo      https:\\me.yahoo.com\bob#d36bd
    1      Yahoo      https:\\me.yahoo.com\alice#c19fd
    2      Yahoo      https:\\me.yahoo.com\bigbobby#x75af
    

    使用这些外键:

    UserOpenIDs.UserID -> Users.ID
    UserOpenIDs.OpenID -> OpenIDs.ID
    

    这是在数据库中存储OpenID标识符的正确方法吗?如何将RPX提供给我的标识符与数据库中的一个匹配,以便用户登录(如果标识符是已知的)。

    所以这里有一些具体的问题:

    • 我如何让没有OpenID或不想使用OpenID的用户可以访问它(安全问题(例如,使用他们的Google帐户登录)
    • 使用OpenID时还需要注意什么?
    3 回复  |  直到 15 年前
        1
  •  4
  •   Kru    15 年前

    使其可访问

    首先,对于没有OpenID的用户,您可以创建一个小页面来解释如何创建一个帐户(甚至指向一些提供者)。这样,创建一个OpenID帐户并不比创建一个普通帐户困难。

    对于不想使用OpenID的人,你有两个选择。 第一:在OpenID登录旁边实现一个老式的登录,让用户选择他们想要的方法。 说一些用户更信任一个网站而不是一个受信任的OpenID提供者来登录,在我看来是很奇怪的,因为OpenID提供者经常使用加密的连接等等。。。

    存储在数据库中

    提出的方案 是你需要的。 (我只是不知道你为什么用反斜杠而不是斜杠来存储URL)

    http://openid.test.com/abc http://openid.test.com/abc/ 作为不同的URL处理。

    没有。 你应该用图书馆 http://openid.net/developers/libraries .

    用户身份的确认是提供商的问题。 只有用户和网站知道帐户的密码。

    (公开) ,他仍然需要密码(或其他身份验证方法,如SSL证书)才能登录。

        2
  •  3
  •   johnny g    15 年前

    阿格,回答我之前的评论。

    从未 直接地

    换句话说,即使恶意用户收集像Pokemon这样的openid,他们也无法访问您的系统。

    UserID to OpenID ]允许一个用户属于多个OpenId,允许一个OpenId属于多个用户。你想要前者而不是后者。

    UserID     Email        
    ------     --------------- 
    86000      bob@yahoo.com 
    86001      alice@yahoo.com 
    
    UserID     Identifier 
    ------     ---------------- 
    86000      https:\\me.yahoo.com\bob#d36bd 
    86000      https:\\me.yahoo.com\bigbobby#x75af 
    86001      https:\\me.yahoo.com\alice#c19fd
    

    UserID 是的外键 Users 表中有唯一的键约束 Identifier ,这本质上是 User 标识符

    希望这有帮助:)

    附言 如果您对集成或利用OpenId有疑问,请逐步实现。识别接收OpenId Url的每一位源代码,然后问问自己是否有可能让恶意用户访问该入口点。我希望只有一个这样的入口点,除了受信任的OpenId提供者之外,其他人都无法访问它。

        3
  •  -1
  •   CMircea    15 年前

    如果用户不能或不想使用OpenID,请与现有提供商合作,并直接在网站上注册,或者自己成为提供商(尽管这意味着也要拥有经典的用户名+密码帐户,有点忽略了问题的重点->仅使用OpenID)。