【问题标题】:Oauth2 Parameter MatchupOauth2 参数匹配
【发布时间】:2018-08-23 07:53:54
【问题描述】:

我是新来的休息和 oauth。我被授予开发人员访问我律师事务所计费软件的权限。我收到了一个带有用户名和密码的“开发者帐户”,并注册了我的“应用程序”,此时我所拥有的所有信息的总和如下:

  1. API 密钥
  2. 密钥
  3. 用于注册应用程序的用户名(电子邮件地址)
  4. 用于注册应用程序的密码
  5. 我想出的应用名称
  6. 我提供的重定向网址

“文档”说我需要在我的请求正文中传递以下 URL 编码的行,并且需要所有参数:

client_id={client_id}&client_secret={client_secret}&grant_type={grant_type}&code={code}&redirect_uri={redirect_uri}

我很难弄清楚是什么。我相信 client_idclient_secret 是我注册应用时提供的 api keysecret key。听起来对吗?

我不知道要使用哪种授权类型。

我不知道“代码”是什么或从哪里得到它。

似乎开发人员没有给我所需的所有信息,但我可能是错的。

【问题讨论】:

    标签: rest oauth-2.0


    【解决方案1】:

    不,这似乎没有足够的信息!是的,API 密钥和秘密听起来像 client_idclient_secret

    通常,授权类型取决于您正在开发的应用程序类型。最常用的是:

    • Web 应用与用户 = Authorisation CodeGrant
    • Javascript 浏览器应用程序 = ImplicitGrant
    • 本机/移动应用程序 = Authorisation Code 授予 PKCE。
    • 无需用户上下文的 Web 应用程序/API = Client Credentials 格兰特。

    根据您提供的信息,我不确定最适合您,但这里是使用几种授权类型获取令牌的常用协议示例:

    授权码授予:

    因此,您将调用律师事务所的授权服务器 2 次:

    1) GET /authorize?response_type=code&client_id=yourclientid
                &redirect_uri=https%3A%2F%2Fyourappserver%2Ecom%2Fcallback HTTP/1.1
    

    您将收到一个代码发送回您的重定向端点,然后您将其发送到身份验证服务器的 /token 端点。

    2)  POST /token HTTP/1.1
             Host: server.yourlawfirm.com
             Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
             Content-Type: application/x-www-form-urlencoded
        
             grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
             &redirect_uri=https%3A%2F%2Fyourappserver%2Ecom%2Fcallback
    

    请注意,在此示例中,基本身份验证代码包含客户端 ID 和密码,但它们通常在请求正文中发送,例如

    2)  POST /token HTTP/1.1
             Host: server.yourlawfirm.com
             Content-Type: application/x-www-form-urlencoded
        
             grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
             &redirect_uri=https%3A%2F%2Fyourappserver%2Ecom%2Fcallback
             &client_id=yourclientid&client_secret=yoursecret
    

    然后授权服务器会从第 2 步返回一个访问令牌

    如果您的应用程序要在不需要用户/上下文的情况下与律师事务所的计费软件对话,那么您将使用客户端凭据授权。

    客户凭证授予。

    此协议的一个示例是调用律师事务所的身份验证服务器:

     POST /token HTTP/1.1
     Host: server.yourlawfirm.com
     Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
     Content-Type: application/x-www-form-urlencoded
    
     grant_type=client_credentials
    

    这将返回一个访问令牌。

    再一次,客户端 ID 和密码包含在基本身份验证标头中,但您可以像我之前展示的那样在请求正文中提供它们。

    例如

     POST /token HTTP/1.1
     Host: server.yourlawfirm.com 
     Content-Type: application/x-www-form-urlencoded
    
     grant_type=client_credentials&client_id=yourclientid&client_secret=yoursecret
    

    此信息基于OAuth2.0 specification

    【讨论】:

    • 我明白了。看起来缺少的信息是我将 client_id 传递给以获取授权码的授权地址。
    • 所以,我想我需要一个授权端点,对吗?我应该清楚我只是使用控制台应用程序,没有网络服务器,我在他们的网站上创建的应用程序注册将 redirect_url 列为 localhost:999。他们是否应该有一个他们忽略提供给我的授权端点,还是我必须自己做的事情?抱歉,Oauth2 让我很困惑。
    • 如果您不必要求用户登录,那么您可以使用client credentials 授权(在我的回答中描述)或Resource Owner Password Credentials 授权(您提供用户名和密码以及您的客户端凭据)。这些流程不需要调用授权端点,因为没有用户被要求授权。
    猜你喜欢
    • 2018-02-16
    • 2019-02-07
    • 2017-03-10
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多