使用MSAL Auth令牌来使用Web API 2

Pie*_* P. 6 c# asp.net azure asp.net-web-api azure-ad-msal

我有一个ASP.Net Web API 2,我在其上实现了以下安全性:https: //docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnet

它工作,我无法访问控制器,除非我删除[授权]属性.

现在,我在Xamarin应用程序中有一个登录用户.用户通过MSAL身份验证登录,也可以正常工作.非常基本的实施:

var authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(App.ClientScope);
var token = authenticationResult.Token;
Run Code Online (Sandbox Code Playgroud)

现在,我想通过在DefaultRequestHeaders中提供MSAL身份验证令牌来访问Web API,如下所示:

this.httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
Run Code Online (Sandbox Code Playgroud)

无论如何这有可能吗?如何使用此令牌让我的用户使用我的Web API?

谢谢 !

Bru*_*hen 10

教程通过使用您在AD v1.0上提到的Azure AD中的承载令牌来帮助保护Web API,您需要在Azure门户上注册您的应用程序.虽然MSAL的目标是AD v2.0,但您需要在apps.dev.microsoft.com上注册您的应用程序,并且您需要在Web API 2中使用中间件,如下所示:

var tvps = new TokenValidationParameters
{
    ValidAudience = clientId,
    ValidateIssuer = false,
};

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    AccessTokenFormat = new Microsoft.Owin.Security.Jwt.JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"))
});
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅active-directory-v2-devquickstarts-dotnet-api.

此外,您可以参考AppModelv2-WebAPI-DotNet获取有关web api后端的代码示例以及通过MSAL访问web api后端的移动客户端.

更新:

  • 我下载了代码示例AppModelv2-WebAPI-DotNet

  • 关注如何使用v2.0端点注册应用程序以注册我的v2.0应用程序,如下所示:

    在此输入图像描述

  • 从上面的屏幕截图中复制Application Id并将其更新为TodoListClientTodoListService项目,如下所示:

    在此输入图像描述

  • 首先启动TodoListService,然后您可以按如下方式调试TodoListService:

    在此输入图像描述

此外,您可以复制令牌并利用邮递员来模拟请求,如下所示:

在此输入图像描述