几个星期前我问过下面的问题而且我得不到合适的答案。或者可能只是不适合我的情况。
C# Microsoft Authentication Get logged user from controller
所以我想也许我没有问正确的问题。我要做的是创建一个具有C#Web API 2后端和Angular 2前端的应用程序。现在,我希望我的身份验证使用人们的Microsoft帐户,这意味着这将是一个外部身份验证。
这样做的最佳方法是什么?如果您可以在博客或文章上提供解释我正在寻找的内容的链接,将非常感激。在我上面的链接中,我使用了msal.js,到目前为止它一直很好用,直到我必须得到记录用户的详细信息。从Angular方面可以实现,但我想在Web API中实现它,因此它更安全。
提前致谢!
如果您使用的是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
并检查它,它应返回索赔清单。
从上一篇文章中的代码看,您需要阅读ClaimsPrincipal。 ClaimsPrincipal是使用OAuthBearerTokens时IPrincipal的实现,所以你当然可以从CurrentPrincipal.Current.Identity
获取用户名
从这份文件
https://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal(v=vs.110).aspx
public IEnumerable<Models.Task> Get()
{
var user = ClaimsPrincipal.Current;
...
}