无法通过从Angular到Azure AD向/ token终结点发送POST请求来获取访问令牌。
如本文档(https://docs.microsoft.com/en-us/graph/auth-v2-user中所述,在获得成功之后,我尝试使用Angular 6从Azure AD获取访问令牌,但我的请求似乎没有到达Azure AD终结点。 / p>
如果我使用相同的参数执行邮递员的请求,则会得到响应。
我没有发现我的请求出了什么问题?
预先感谢您的帮助!
getToken(tokenId: string) {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'login.microsoftonline.com'
})
};
const body = new HttpParams()
.set("client_id", "my_client_id")
.set("scope", "user.read offline_access")
.set("redirect_uri", "https://localhost:3000/")
.set("grant_type", "authorization_code")
.set("client_secret", "my_client_secret")
.set("code", tokenId);
this.http.post("https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/token", body.toString(), httpOptions).toPromise()
.then(res => {
// success
})
.catch(err => {
this.error = JSON.stringify(err);
});
}
出现错误:
“从源'https://login.microsoftonline.com/my_tenant-id/oauth2/v2.0/token'到'https://localhost:3000'处对XMLHttpRequest的访问已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头” < / p>
我试图在标题中添加'Access-Control-Allow-Origin':'*',但是它不起作用...
答案 0 :(得分:0)
我找到了一个解决方案:由于CORS的限制,Angular无法请求“ https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/token”。 因此,我将授权代码发布到后端,后端发出从Azure AD获取访问令牌的请求,并将令牌和刷新令牌返回到Angular。
ps:在获取第一个授权代码时不要忘记“ offline_access”作用域参数,以确保稍后获得“ refresh_token”!