【问题标题】:C# Web API 2 & Angular - Microsoft Account AuthenticationC# Web API 2 和 Angular - Microsoft 帐户身份验证
【发布时间】:2018-02-23 07:06:36
【问题描述】:

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

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!我能够获取登录用户的信息。
    • 顺便说一句,我只想指出,就我而言,我必须使用Where(x => x.Type == "preferred_username") 来获取登录用户的电子邮件。
    • 是的,这取决于您返回的声明类型,最好是设置断点并检查您返回的内容。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 2017-07-27
        • 2014-06-04
        • 2017-01-23
        • 2015-12-25
        • 2014-01-28
        • 1970-01-01
        • 2018-02-04
        • 2017-10-14
        相关资源
        最近更新 更多