我正在尝试使用Graph API从Angular应用程序发送邮件。
下面是代码
const resource = {
grant_type : 'client_credentials',
clientID: '****************************',
redirectUri: 'http://localhost:4200/',
validateAuthority : true,
popUp: true,
scopes: ['mail.send'],
resource : 'https://graph.microsoft.com'
};
let murl : any
murl = 'https://graph.microsoft.com/v1.0/users/' + 'testuser@abcd.onmicrosoft.com' + '/sendMail';
this.token = await this.msalService.acquireTokenSilent(resource)
.catch((reason) => {
// console.log(reason);
});
let header = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.token.accessToken});
let options = { headers: header };
let resp = this.http.post(murl, this.sendMailDet, options)
resp.subscribe(
(data)=>{
console.log( data);
}
);
但当我发送邮件时,我会收到以下错误。
error: {code: "InvalidAuthenticationToken", message: "Access token validation failure. Invalid audience.",…}
code: "InvalidAuthenticationToken"
innerError: {date: "2021-01-06T04:52:20", request-id: "*********",…}
message: "Access token validation failure. Invalid audience."
我使用参考资料中的作用域:['mail.send'],但仍然会出现此错误。此外,我仅使用来自this.msalService.AcquireTokenSilent(资源)的accessToken。
我不得不从angular发送令牌,因为首先会显示accept或cancel弹出。所以不得不从角度处理。但它给了我问题中提到的错误。因此我创建了一个API,并从Angular发送令牌和其他细节。
这是角部
数据:带有From,To,CC,bcc,emailbody等的对象。使用这些值,我们在API中创建json电子邮件格式
async sendmail(data): Promise<Boolean>
{
let result : any ;
const resource = {
clientID: environment.config.identityConfig.clientId ,
redirectUri: environment.config.identityConfig.redirectUri , // 'http://localhost:4200/'
validateAuthority : true,
popUp: true,
scopes: ['mail.send'],
resource : 'https://graph.microsoft.com'
};
this.token = await this.msalService.acquireTokenSilent(resource)
.catch((reason) => {
console.log(reason);
});
this.atoken = this.token.accessToken;
data.EMailAccessToken = this.token.accessToken;
this.mailHttpService.post('/sendmailgapi', data, null, null, ApiUrl.FileService). // This is custom
subscribe((data) => {
result = data;
});
return result;
}
那么在API中,
getGraphClient():这是另一个使用客户端ID、承租人ID、ClientSecret和ConfidentialClientApplicationBuilder创建图形客户端的方法。
sendMailDto:传递对象
GraphServiceClient graphClient = this.applicationContext.GetGraphClient();
var fromEmail = sendMailDto.EMailFrom ; //
var accessToken = sendMailDto.EMailAccessToken;
var message = createMessage(sendMailDto);
var restClient = new RestClient("https://graph.microsoft.com/v1.0/users/" + fromEmail + "/sendMail");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + accessToken
request.AddParameter("", message, ParameterType.RequestBody);
IRestResponse response = restClient.Execute(request);
我不确定这是不是正确的方法,但我必须做一个解决问题的变通办法。
好的,我已经花了两天的时间来解决这个错误,并找到了一个解决方案。在我的搜索中,我没有找到一个单一的答案来解决我所面临的问题(相反,我找到了多个最终指向解决方案的答案)。因此,我尝试向您解释“访问令牌验证失败。无效访问群体”错误的解决方案: TLDR: 检查“https://graph.Microsoft.com”在https://jwt.ms/上与MSAL进行身份验证时收到的访问令牌中是否作为AU
在错误=我正在获取“消息”的上下文中需要帮助:“Access token validation Failure.Invalid Pavior.”, 我正在使用OAuth中的授权代码授予类型。我已经使用Azure广告策略将自定义声明映射到应用程序。因此,如果用户Scope=appid/.default,那么我将在令牌中获得一个自定义声明,并在Azure AD上对应用程序具有API权限,如user.r
null null “AADSTS28000:为输入参数scope提供的值无效,因为它包含多个资源。scope api://{API-application-id}/a-scope https://graph.microsoft.com/user。Read openid配置文件无效。” 这里,我们的后端是一个资源,它有一个作用域,“https://graph.microsoft.com”是另一个作
有没有人可以帮助我,我做错了什么,或者这种情况不被支持
我在谷歌上搜索了很多关于这个问题的信息,但没有任何帮助。我也看到过许多类似的帖子,但没有什么用处。 我正在使用MS Graph API V2访问用户电子邮件、日历和联系人数据。 授权URL: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=ABC 令牌请求URL: https://login.micr
我在使用jwt.io验证我的azure广告访问令牌时获得无效签名(在手动检查后将转移到scala代码)。 我正在使用 curl 生成访问令牌: 虽然它为我提供了访问令牌,但响应不包含“Id_token”。不知道为什么。 我正在使用 BEGIN 和 END 证书包装 https://login.microsoftonline.com/common/discovery/keys 中的公钥。(如 htt