如何解决MSAL和OAuth 2.0-以编程方式请求授权码
目标是通过编程方式从MSAL获得access token
来进行赛普拉斯e2e测试。
我们使用V2.0 API。
因此,我首先需要获取authorization code
:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code
获得access token
https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-access-token
因此,为了获得authorization code
,我需要执行此请求
// GET
// Line breaks for legibility only
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&state=12345
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
但这会返回text/html
,因此我需要手动登录才能获取代码。
是否可以通过编程方式获得authorization code
?
解决方法
这就是我通过创建 login
命令来解决它的方法。该命令以编程方式获取令牌并将其存储到 localStorage 中。
import 'cypress-localstorage-commands';
Cypress.Commands.add('login',() => {
const request = {
method: 'POST',form: true,url: `https://login.microsoftonline.com/${Cypress.config('tenantId')}/oauth2/v2.0/token`,body: {
grant_type: 'client_credentials',client_id: Cypress.config('clientId'),client_secret: Cypress.config('clientSecret'),scope: `${Cypress.config('clientId')}/.default`,},};
cy.request(request).then(response => cy.setLocalStorage('msal.idtoken',response.body.access_token));
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。