使用授权码OAuth2获取新的访问令牌 - 使用机器人框架。

问题描述 投票:1回答:1

我在使用机器人框架和Oauth2获取带有授予类型授权代码的访问令牌时遇到了一些麻烦,我们还使用了用户名密码认证,在给出以下参数后,我们得到了我们的访问令牌:授予类型、回调URL、Auth URL、访问令牌URL、客户端ID、客户端秘密、范围、状态。

我也试过用 RequestsLibrary 和 ExtendedRequestsLibrary,但到目前为止还没有成功。实际上我不知道如何添加参数:回调 URL、Auth URL、访问令牌 URL 和状态。

First try - using RequestsLibrary 

Get admin token
&{HEADER_TOKEN}=    Create Dictionary   Content-Type=${CONTENT_TYPE} 
 &{DATA_TOKEN}=    Create Dictionary     token_name=backend_token    grant_type=${GRANT_TYPE}   redirect_uri =${CALLBACK_URL}   auth_url=${AUTH_URL}   access_token_url=${ACCESS_TOKEN_URL}    client_id=${CLIENT_ID}    client_secret=${CLIENT_SECRET}    scope=${SCOPE}    state=${STATE}   username=${USERNAME}    ${PASSWORD}
 ${BACKEND_RESPONSE}=   RequestsLibrary.Post Request    ${BACKEND_SESSION}    /oauth/token      data=${DATA_TOKEN}     headers=${HEADER_TOKEN} 
 Log to console    ${BACKEND_RESPONSE}
 Should Be Equal As Strings  ${BACKEND_RESPONSE.status_code}  200

Second try - using ExtendedRequestsLibrary 

Get brand new admin token
    ${SESSION_RESPONSE}=    Create Password Oauth2 Session    client    ${TOKEN_URL}    ${CLIENT_ID}    ${CLIENT_SECRET}    ${USERNAME}    ${PASSWORD}    base_url=${BASE_URL}

    &{HEADER_TOKEN}=    Create Dictionary   Content-Type=${CONTENT_TYPE} 
    &{DATA_TOKEN}=    Create Dictionary     token_name=client   grant_type=${GRANT_TYPE}   callback_url=${CALLBACK_URL}   auth_url=${AUTH_URL}   access_token_url=${ACCESS_TOKEN_URL}    client_id=${CLIENT_ID}    client_secret=${CLIENT_SECRET}    scope=${SCOPE}    state=${STATE}
    ${BACKEND_RESPONSE}=   ExtendedRequestsLibrary.Post Request   client    /oauth/token      data=${DATA_TOKEN}     headers=${HEADER_TOKEN} 
    Log to console    ${BACKEND_RESPONSE}
    Should Be Equal As Strings  ${BACKEND_RESPONSE.status_code}  200
    Log to console    ${BACKEND_RESPONSE.status_code}

如果你有什么想法就告诉我吧。

thx!

api oauth-2.0 robotframework
1个回答
1
投票

使用 RequestsLibrary 尝试使用这种方法,它应该工作:-。

Create Session   baseUri   https://xxxxxx.xx.xxx/xxx/xx      verify=True
&{params}=  Create Dictionary   client_id=${client_id}   client_secret=${client_secret}   grant_type=${grant_type}
&{headers}=  Create Dictionary   Content-Type=application/json
${resp}=  Post Request  baseUri  /oauth/token    none    none    ${params}  ${headers}
Log to Console  ${resp.json()['access_token']}
Status Should Be  200            ${resp}

你在你的post请求中传递data=${DATA_TOKEN}作为一个主体。你需要把它作为查询参数发送。第一个参数是别名,第二个参数是 uri,第三个参数是 data,第四个参数是 Json,第五个参数是 query params,所以在 Post Request baseUri oauthtoken none none ${params} ${headers} 中,你会发现第三个和第四个参数是 none。希望这能奏效

© www.soinside.com 2019 - 2024. All rights reserved.