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

时间:2017-06-07 13:08:28

标签: c# asp.net azure asp.net-web-api msal

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

虽然有效,但我无法访问控制器,除非我删除了[Authorize]属性。

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

var authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(App.ClientScope);
var token = authenticationResult.Token;

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

this.httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

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

谢谢!

1 个答案:

答案 0 :(得分:8)

您在AD v1.0上提到的目标Help protect a web API by using bearer tokens from Azure AD,您需要在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"))
});

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

此外,您可以通过MSAL访问网络API后端,参考AppModelv2-WebAPI-DotNet获取有关网络API后端和移动客户端的代码示例。

<强>更新

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

  • 按照How to register an app with the v2.0 endpoint注册我的v2.0应用程序,如下所示:

    enter image description here

  • 从上面的屏幕截图中复制应用ID ,并将其更新为 TodoListClient TodoListService 项目,如下所示:

    enter image description here

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

    enter image description here

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

enter image description here