【发布时间】:2020-09-26 18:08:27
【问题描述】:
每当用户通过 Azure Active Directory OAuth 登录到我的应用程序时,我想检查用户的 Active Directory 组并根据它们分配角色。我的应用程序正在运行 Orchard Core,所以我想使用 Orchard 的内置 AAD 身份验证模块来实现它。
我无法使用任何配置,因此我将整个模块的源代码复制到我的应用程序中(使用 Orchard 作为 NuGet 包)并手动修改 OpenIdConnct 配置以在发出令牌时添加事件侦听器然后调用 Microsoft Graph API 来检索组信息。
问题是我收到的令牌看起来是有效的(我在 jwt.io 上检查过,令牌的范围是:"scp": "offline_access openid profile User.Read")。
但是当我尝试在 Graph API 中使用此令牌时,它会以 Access Token missing or malformed. 进行响应。
我花了很多时间,但不知道为什么会这样。
我使用的代码如下:
options.ClientId = azureADOptions.ClientId;
options.ClientSecret = azureADOptions.ClientSecret;
options.Authority = new Uri(new Uri(azureADOptions.Instance), azureADOptions.TenantId).ToString();
options.CallbackPath = azureADOptions.CallbackPath ?? options.CallbackPath;
options.SignedOutCallbackPath = azureADOptions.SignedOutCallbackPath ?? options.SignedOutCallbackPath;
options.SignInScheme = "Identity.External";
options.Scope.Add("openid");
options.Scope.Add("offline_access");
options.Scope.Add($"api://{azureADOptions.ClientId}");
options.Resource = azureADOptions.ClientId;
options.Scope.Add(HttpUtility.HtmlEncode(GraphService.GraphInstance));
options.ResponseType = OpenIdConnectResponseType.IdTokenToken;
options.Events.OnMessageReceived += context =>
{
return Task.CompletedTask;
};
options.Events.OnTokenResponseReceived += context =>
{
return Task.CompletedTask;
};
options.Events.OnTicketReceived += context =>
{
return Task.CompletedTask;
};
我已读取事件处理程序中的访问令牌并使用邮递员调用 Graph API,但失败了。
有什么问题?
【问题讨论】:
-
如果我的答案对您有帮助,您可以接受它作为答案(点击答案旁边的复选标记,将其从灰色切换为已填充。)。见meta.stackexchange.com/questions/5234/…。这对其他社区成员可能是有益的。谢谢。
标签: c# asp.net .net-core oauth-2.0 azure-active-directory