我有一个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?
谢谢!
答案 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应用程序,如下所示:
从上面的屏幕截图中复制应用ID ,并将其更新为 TodoListClient 和 TodoListService 项目,如下所示:
首先启动 TodoListService ,然后您可以按如下方式调试 TodoListService :
此外,您可以复制令牌并利用邮递员模拟请求,如下所示: