我有一个SPA应用程序,它使用AAD v2身份验证与我的后端Web API通信。现在我正在开发一个控制台应用程序,代表登录到SPA应用程序的用户调用Microsoft Graph。
我有一个用户的有效访问令牌(用于调用后端Web API)。我想使用这个访问令牌请求一个新的令牌来访问MS Graph。
下面是控制台应用程序的代码,用于使用MSAL.NET请求带有MS图形作用域的新访问令牌:
string clientId = "<clientId>";
string clientSecret = "<clientSecret>";
string accessToken = "<validAccessTokenForWebApi>";
string assertionType = "urn:ietf:params:oauth:grant-type:jwt-bearer";
string[] scopes = new string[] { "User.Read", "Mail.Send" };
string graphAccessToken = null;
try
{
var app = ConfidentialClientApplicationBuilder
.Create(clientId).WithClientSecret(clientSecret).Build();
var userAssertion = new UserAssertion(accessToken, assertionType);
var result = app.AcquireTokenOnBehalfOf(scopes, userAssertion)
.ExecuteAsync().GetAwaiter().GetResult();
graphAccessToken = result.AccessToken;
}
catch (MsalServiceException ex)
{
throw;
}
但是,当我调用app.AcquireTokenOnBehalfOf()
时,我得到一个异常:
AADSTS50013:断言签名验证失败。[原因-提供的签名值与预期的签名值不匹配。,客户端使用的密钥指纹:'BB839F3453C7C04068B078EDADAB8E6D5F382E76',找到密钥'start=06/04/2019 00:00:00,end=06/04/2021 00:00:00']
如果您想代表flow使用OAuth 2.0,我认为您不需要开发一个控制台应用程序来调用graph API。您可以直接使用后端Web API应用程序获取访问令牌,然后调用Microsoft Graph。根据我的理解,你只要做这些步骤
更多详情请参阅示例。
>
在Azure门户中,导航到您的Web api应用程序注册,并单击清单部分。
找到属性knownClientApplications并添加SAP应用程序的客户端ID
获取访问令牌以调用web api
GET https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?scope=<you web api scope> openid
&redirect_uri=<your sap app redirect url>
&nonce=test123
&client_id=<you sap app client id>
&response_type=id_token token
POST https://login.microsoftonline.com/common/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id=<you web api client id>
&assertion=<you acess token you get in above steps>
&client_secret=<you app secret>
&scope=https://graph.microsoft.com/user.read
&requested_token_use=on_behalf_of
MSAL.NET代码
string[] scopes = { "user.read" };
string accesstoken = "";
string appKey = "yor web api client secret";
string clientId = "your web api application id";
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(appKey)
.Build();
UserAssertion userAssertion = new UserAssertion(accesstoken,
"urn:ietf:params:oauth:grant-type:jwt-bearer");
var result = app.AcquireTokenOnBehalfOf(scopes, userAssertion).ExecuteAsync().Result;
Console.WriteLine(result.AccessToken);
我有一个Web应用程序(Angular 7),它使用MSAL Angular对Azure AD用户进行身份验证,并获取访问我的Web API(.NET 4.6)的访问令牌。这两个应用都已在Azure门户中注册,并具有以下权限,如下所述: Web应用程序:for Web API(委派) Web API:<代码>用户。阅读邮政发送MS图表(委派) 现在,我想使用ADAL for从Web API调用Mi
我需要在Spring Boot应用程序的服务层中获得访问令牌(grant_type=client_credentials),以便与其他微服务对话(服务到服务的交互)。这一层没有spring http会话或auth,我只有client_id、client_secret和令牌URL。这些属性在Application.properties中设置为: 这在Spring Security OAuth中似乎很
我正在尝试access Microsoft Graph API使用以下endpoint查询用户所属的组列表 https://graph.microsoft.com/v1.0/users/{userID}/memberof 但从过去两天开始,我的查询失败了,回复如下 谢谢你的帮助。
我已经创建了一个webapp类型的Azure AAD应用程序,它具有客户端秘密和重定向URL。现在,我想获得一个访问令牌代表用户使用AAD应用程序。通过查看文档,到目前为止,我得到了以下代码。 但这是我在尝试获取用户令牌时得到的错误,如下所示。 消息“AADSTS70002:请求正文必须包含以下参数:'Client_Secret或Client_Assertion'。\r\n跟踪ID:0E977F6
问题内容: 我已经使用 Laravel Passport文档* 成功创建了 server.app 和 client.app 。一切正常。 * client.app路线: 默认情况下,此路由返回 access_token ,我可以用它执行我想做的任何事情。 请求: 返回值: 题: 如何使用 client.app中* 给定的access_token 向 server.app 发出正确请求,以获取例如