Xero SDK - 状态参数的 OAuth 实现
Xero SDK - OAuth implementation of state parameter
我目前已经实现了一个 NodeJs,用 xero-node
sdk 包表达 api,我 运行 遇到了一个问题,它似乎没有 OAuth 状态参数未被使用(尽管我看到它被定义为 XeroClient 构造函数的可选参数:
export interface IXeroClientConfig {
clientId: string,
clientSecret: string,
redirectUris: string[],
scopes: string[],
state?: string
}
谁能确认这是否已实施?
我假设它会像这样工作:
const xero = new XeroClient({
clientId: xeroParams.clientId,
clientSecret: xeroParams.clientSecret,
redirectUris: [xeroParams.redirectUrl],
scopes: xeroParams.scopes.split(' '),
state: this.callback_state,
});
//then when building the consent url like this, the state param would be included
const consentUrl = await xero.buildConsentUrl();
然后当回调被触发时,我希望能够访问 state code
作为查询参数之一。一些沿线解释 here
我已经看到返回的 session_state
参数,但这与我提供的州代码不匹配。
以下是使用 xero-node
SDK 通过 OAuth 流程传递状态的方法:
https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37
示例:
- 首先生成 consentUrl,然后附加您的自定义参数。
app.get('/connect', async function(req, res) {
try {
let consentUrl = await xero.buildConsentUrl();
res.redirect(consentUrl + "&state=THIS_IS_A_STANDARD_OAUTH_2_STATE_PARAMETER"); // Append any type of state/params you would like
} catch (err) {
res.send("Sorry, something went wrong");
}
})
...
app.get('/callback', async function(req, res) {
let url = redirectUri + req.originalUrl;
console.log('req.query: ', req.query) // this will the the same state/params you passed to the API
// ...do api stuff..
// ref: https://github.com/XeroAPI/xero-node-oauth2-app
res.send(req.query);
})
https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37
值得注意的是 XeroClient 的可选 state:
参数是为 openidclient 东西保留的。不要使用它。只需将其附加到同意 url.
我目前已经实现了一个 NodeJs,用 xero-node
sdk 包表达 api,我 运行 遇到了一个问题,它似乎没有 OAuth 状态参数未被使用(尽管我看到它被定义为 XeroClient 构造函数的可选参数:
export interface IXeroClientConfig {
clientId: string,
clientSecret: string,
redirectUris: string[],
scopes: string[],
state?: string
}
谁能确认这是否已实施?
我假设它会像这样工作:
const xero = new XeroClient({
clientId: xeroParams.clientId,
clientSecret: xeroParams.clientSecret,
redirectUris: [xeroParams.redirectUrl],
scopes: xeroParams.scopes.split(' '),
state: this.callback_state,
});
//then when building the consent url like this, the state param would be included
const consentUrl = await xero.buildConsentUrl();
然后当回调被触发时,我希望能够访问 state code
作为查询参数之一。一些沿线解释 here
我已经看到返回的 session_state
参数,但这与我提供的州代码不匹配。
以下是使用 xero-node
SDK 通过 OAuth 流程传递状态的方法:
https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37
示例:
- 首先生成 consentUrl,然后附加您的自定义参数。
app.get('/connect', async function(req, res) {
try {
let consentUrl = await xero.buildConsentUrl();
res.redirect(consentUrl + "&state=THIS_IS_A_STANDARD_OAUTH_2_STATE_PARAMETER"); // Append any type of state/params you would like
} catch (err) {
res.send("Sorry, something went wrong");
}
})
...
app.get('/callback', async function(req, res) {
let url = redirectUri + req.originalUrl;
console.log('req.query: ', req.query) // this will the the same state/params you passed to the API
// ...do api stuff..
// ref: https://github.com/XeroAPI/xero-node-oauth2-app
res.send(req.query);
})
https://github.com/SerKnight/xero-node-basic-app/blob/master/index.js#L37
值得注意的是 XeroClient 的可选 state:
参数是为 openidclient 东西保留的。不要使用它。只需将其附加到同意 url.