我有一个实现 MVC 控制器和 webapi 控制器的 Web 应用程序。此 Web 应用程序使用基于外部 cookie 的 Microsoft 帐户身份验证。
现在,我想使用 MSAL 从本机(桌面)应用程序查询 webapi,以针对 Microsoft 标识平台对用户进行身份验证。
我尝试添加以下代码以使用不记名身份验证来执行此操作:app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
}
});
我可以通过 PublicClientApp.AcquireTokenInteractive 方法对客户端进行身份验证,并使用生成的 AccessToken 来复合 Authorization 标头,但 webapp 会以 401 错误代码响应。
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var response = httpClient.SendAsync(request).Result;
总之,目标不是同时使用 cookie 和承载身份验证,而是使用 MVC 拥有一个独特的 Web 应用程序:
- 可以提供带有授权机制的网页
- 可以使用相同的授权机制发布基于 REST 的 API(通过 WebAPI),即:
- 针对 Microsoft Azure AD 帐户进行身份验证
- 可由桌面客户端使用
- 可以被以前的 web 应用程序页面用于显示动态内容。