V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
bayker
V2EX  ›  问与答

OAuth 2.0 生成的 ID 密钥怎么给第三方对接?

  •  1
     
  •   bayker · 2019-10-16 11:39:32 +08:00 · 2400 次点击
    这是一个创建于 1625 天前的主题,其中的信息可能已经有所发展或是发生改变。

    部署了一个 Oauth2.0。但实际使用的时候,我生成 ID 密钥后,怎么给对接方呢? QQ,邮件 但感觉都不对,这样颁发者(我)也知道了他们的 ID,密钥。

    这完全是不可信,可靠的方式啊。 请问大家是用什么方式呢?

    第 1 条附言  ·  2019-10-16 15:20:44 +08:00
    我的疑问是,基于 Oauth2.0 标准,来保护我的 API 接口时。 如果用 password 模式,Clientid 和 password 怎么给对方才是合理,安全的?
    26 条回复    2019-10-16 15:34:57 +08:00
    zhaishunqi
        1
    zhaishunqi  
       2019-10-16 13:20:01 +08:00
    上帝视角?
    haoz1w0w
        2
    haoz1w0w  
       2019-10-16 13:21:41 +08:00
    让他们生成啊
    j2gg0s
        3
    j2gg0s  
       2019-10-16 13:28:22 +08:00
    bayker
        4
    bayker  
    OP
       2019-10-16 13:40:06 +08:00
    @zhaishunqi ?? 是我对 oauth2.0 理解有误?请指明
    bayker
        5
    bayker  
    OP
       2019-10-16 13:40:52 +08:00
    @haoz1w0w 第三方可以自己生成 id 密钥对,来调用我的认证?
    lovedebug
        6
    lovedebug  
       2019-10-16 13:44:28 +08:00 via Android
    建议楼主看一下流程。你是要 oauth 别人比如你允许 qq 登录你的网站,还是要提供 oauth 服务,比如你网站的账户可以登录其他网站呢
    bayker
        7
    bayker  
    OP
       2019-10-16 14:07:42 +08:00
    @lovedebug 我是想保护我的 API 接口
    lovedebug
        8
    lovedebug  
       2019-10-16 14:12:12 +08:00 via Android
    那你需要提供一个接口让用户调你的 api 生成 token,他们自己负责保存。
    CRUD
        9
    CRUD  
       2019-10-16 14:14:23 +08:00
    搞个注册的页面让他们自己注册
    bayker
        10
    bayker  
    OP
       2019-10-16 14:20:10 +08:00
    @CRUD 我想的也是让他们自己注册。或者提供一个登陆后,修改自己的密钥界面。
    bayker
        11
    bayker  
    OP
       2019-10-16 14:21:30 +08:00
    @lovedebug 我的意思是,他们调用 API 生成 TOKEN 的时候,使用的密钥。 怎么给他们,这个密钥应该除了他们自己,其他人都不应该知道,包括颁发者(我)。
    littleylv
        12
    littleylv  
       2019-10-16 14:25:30 +08:00
    appID 和 appSecret 不应该是你给他们哦,是你提供一个页面,他们去注册,生成。全程你都不要参与的
    littleylv
        13
    littleylv  
       2019-10-16 14:26:57 +08:00
    但是要说你不知道是不可能的,因为这个是会存到你的数据库的 [滑稽
    lovedebug
        14
    lovedebug  
       2019-10-16 14:29:18 +08:00
    他们把公钥填写在你这里,你可以用公钥验证他们,他们自己有私钥可以验证你。
    popvlovs
        15
    popvlovs  
       2019-10-16 14:43:22 +08:00
    Github 的 OAuth 你用过么?和你的场景几乎一样,你可以参考一下 https://github.com/settings/applications/new。AppId 和 AppSecret 是自动生成的,用户自己持有
    popvlovs
        16
    popvlovs  
       2019-10-16 14:46:08 +08:00
    这个 ID 和密钥因为你签发的,你当然需要知道,不然怎么校验防止冒充呢?我在想你是不是把用户的 Username Password Credential 和 AppId、AppSecret 弄混了...
    popvlovs
        17
    popvlovs  
       2019-10-16 14:50:16 +08:00
    你只需要保证 AppId、AppSecret 不被你和用户之外的第三方知道就可以了
    bayker
        18
    bayker  
    OP
       2019-10-16 15:04:53 +08:00
    @popvlovs 额,好的。我去了解下。 我理解的是,Oauth 认证简单模式只需要 Clientid 就行了,密码模式只需要告诉第三方 clientid 和 Password 就行了。还需要 appid,appsecret ?还是说 是同一个东西,只是叫法不一样?
    momocraft
        19
    momocraft  
       2019-10-16 15:10:19 +08:00
    建议先把 oauth rfc 看一遍,至少看 1.1
    bayker
        20
    bayker  
    OP
       2019-10-16 15:12:05 +08:00
    @momocraft 你觉得我是哪里理解有误或者没理解到?
    bayker
        21
    bayker  
    OP
       2019-10-16 15:18:01 +08:00
    @littleylv 密钥我真不知道,密钥是加密存储数据库。但 AppId、AppSecret 是什么,不属于 oauth2.0 吧。
    bayker
        22
    bayker  
    OP
       2019-10-16 15:18:31 +08:00
    @popvlovs AppId、AppSecret 是什么,是属于 Oauth 的吗?
    popvlovs
        23
    popvlovs  
       2019-10-16 15:30:03 +08:00
    @bayker 你的理解是不对的,你所说的密码模式是 Resource Owner Password Credentials Grant 么?这个模式下没有 AppId 和 AppClient (这意味着 OAuth 服务供应商无需校验应用端的可靠性,一般来说不会这样做,除非 OAuth 服务供应商完全信任应用端),这个模式下用户需要输入自己的登陆凭证(一般是用户名和密码)来交换 Token
    popvlovs
        24
    popvlovs  
       2019-10-16 15:33:06 +08:00
    比较常用的模式是 Authorization Code Grant,这种模式下,OAuth 服务的供应商会签发一对 AppId 和 AppSecret 给应用端,这两个东西是 OAuth 服务商校验 App 身份的一个手段,主要目的是为了防止冒充
    popvlovs
        25
    popvlovs  
       2019-10-16 15:33:26 +08:00
    也叫 ClientId 和 ClientSecret
    bayker
        26
    bayker  
    OP
       2019-10-16 15:34:57 +08:00
    @popvlovs 好的,明白了。谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1785 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:32 · PVG 00:32 · LAX 09:32 · JFK 12:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.