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

问题描述 投票:0回答:3

几个星期前我问过下面的问题而且我得不到合适的答案。或者可能只是不适合我的情况。

C# Microsoft Authentication Get logged user from controller

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

这样做的最佳方法是什么?如果您可以在博客或文章上提供解释我正在寻找的内容的链接,将非常感激。在我上面的链接中,我使用了msal.js,到目前为止它一直很好用,直到我必须得到记录用户的详细信息。从Angular方面可以实现,但我想在Web API中实现它,因此它更安全。

提前致谢!

c# angular asp.net-web-api2 msal
3个回答
1
投票

如果您使用的是OpenId,则您拥有在授权用户时返回的声明。我假设您使用Azure B2C进行授权,在这种情况下,您可以选择将作为令牌的一部分返回的clams。

例如,如果要获取用户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;

这取决于您的授权返回的权利要求,最简单的方法是断点

ClaimsPrincipal.Current

并检查它,它应返回索赔清单。


1
投票

从上一篇文章中的代码看,您需要阅读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;
    ...
}

© www.soinside.com 2019 - 2024. All rights reserved.