C# Web API 2 & Angular - Microsoft 帐户身份验证

C# Web API 2 & Angular - Microsoft Account Authentication

几周前我问过下面的问题,但没有得到有效的答案。或者可能只是不适合我的情况。

C# Microsoft Authentication Get logged user from controller

所以我想也许我问的问题不对。我想要做的是创建一个应用程序,它有一个 C# Web API 2 后端和一个 Angular 2 前端。现在,我希望我的身份验证使用人们的 Microsoft 帐户,这意味着这将是一个外部身份验证。

执行此操作的最佳方法是什么?如果您能在博客或文章中提供 link 来解释我正在寻找的内容,我们将不胜感激。在我上面的 link 中,我使用了 msal.js,到目前为止它对我来说工作正常,直到我不得不获取登录用户的详细信息。在 Angular 方面是可能的,但我想在 Web API 中进行,这样更安全。

提前致谢!

从您之前 post 中的代码来看,您似乎需要改为从 ClaimsPrincipal 中读取。 ClaimsPrincipal是使用OAuthBearerTokens时IPrincipal的实现,所以当然可以从CurrentPrincipal.Current.Identity

获取用户名

来自该文档

https://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal(v=vs.110).aspx

https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-api-dotnet

public IEnumerable<Models.Task> Get()
{
    var user = ClaimsPrincipal.Current;
    ...
}

如果您使用的是 OpenId,则您拥有在用户获得授权后 returned 的声明。我假设您正在使用 Azure B2C 进行授权,在这种情况下,您可以 select 将作为令牌的一部分 returned 的蛤蜊。

例如,如果你想获取用户id:

var userId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;

邮箱:

string userName = ClaimsPrincipal.Current.Claims.Where(x => x.Type == "emails").FirstOrDefault()?.Value;

这取决于您的授权 returned 的声明,最简单的方法是在

上设置断点
ClaimsPrincipal.Current

并检查它,它应该 return 声明列表。

我用这个例子

https://github.com/Azure-Samples/active-directory-b2c-javascript-angular2.4-spa

而且效果很好