C# 使用MSAL Auth令牌使用Web API 2

C# 使用MSAL Auth令牌使用Web API 2,c#,asp.net,azure,asp.net-web-api,msal,C#,Asp.net,Azure,Asp.net Web Api,Msal,我有一个ASP.Net Web API 2,我在其上实现了以下安全性: 它起作用了,我不能访问控制器,除非我删除[Authorize]属性 现在,我有一个登录用户在Xamarin应用程序中。用户通过MSAL身份验证登录,该身份验证也可以正常工作。 非常基本的实施: var authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(App.ClientScope); var token = authent

我有一个ASP.Net Web API 2,我在其上实现了以下安全性:

它起作用了,我不能访问控制器,除非我删除[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

谢谢大家!

您在AD v1.0上提到的教程目标,您需要在Azure Portal上注册应用程序。虽然目标是AD v2.0,但您需要在注册应用程序,并且您需要在Web API 2中使用中间件,如下所示:

var tvps=新的令牌验证参数
{
有效期=客户ID,
validateisuer=false,
};
app.useAuthBeareAuthentication(新的OAuthBeareAuthenticationOptions
{
AccessTokenFormat=新的Microsoft.Owin.Security.Jwt.JwtFormat(tvps,新的OpenIdConnectCachingSecurityTokenProvider(“https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"))
});
有关更多详细信息,请参阅

此外,有关web api后端和通过MSAL访问web api后端的移动客户端的代码示例,您可以参考

更新:

  • 我下载了代码示例

  • 按照以下步骤注册我的v2.0应用程序:

  • 从上面的屏幕截图复制应用程序Id,并将其更新到TodoListClientTodoListService项目,如下所示:

  • 首先启动TodoListService,然后可以调试TodoListService,如下所示:

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


谢谢您的回答,我确实使用了示例项目作为指南来实现您描述的方法。我将在收到除“{“$id”:“1”,“消息”:“此请求的授权已被拒绝。”}”以外的其他消息后立即标记您的答案。谢谢非常感谢您的完整更新!我现在正试图让这个工作在我的项目,现在它的工作对样本。谢谢你的时间。我面临一个问题,当我试图联系我的API时,我没有点击我的控制器,只是立即得到401个错误。对此有什么见解吗?再次感谢你。编辑:发布另一个问题。不确定两者是否相关,但正如我所知,api端将从客户端发送的承载令牌验证受众(clientId),您可以使用它来解码令牌并进行检查。由于核心代码是由代码示例提供的,并且可以按预期工作,因此对于您的项目,您可以打开一个新问题,并提供代码片段或示例项目,以便在可能的情况下复制此问题。我将检查您的新问题。