在Azure移动应用中向经过身份验证的用户添加其他声明

时间:2016-04-23 23:36:15

标签: azure authentication azure-mobile-services

我正在学习Azure App Services中的Azure移动应用程序可能性,并且在身份验证(和授权)方面存在一些问题。我使用Azure移动应用Quickstart来了解可用的功能。

第一个问题: 我是否正确理解我无法使用Microsoft.Azure.Mobile.Server.Login包实现自定义身份验证,如文章Work with the .NET backend server SDK for Azure Mobile Apps中的“如何:对应用程序使用自定义身份验证”部分所述我想使用内置的Azure身份验证提供程序(用于Facebook,Google等的身份验证)? 在安全方面,我更喜欢配置并使用内置功能而不是自定义开发; - )

第二个问题: 我目前正在尝试向在我的Azure移动应用程序中成功注册和验证的用户添加一些自定义声明(例如,基于用户的SID从Azure SQL数据库读取的角色声明)。 实现这一目标的最佳方法是什么? 我的想法是在TableController的Initialize方法中添加声明,如下所示,然后使用[Authorize(Roles =“Test”)]属性检查角色。 有没有理由不这样做?

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);
        myapptestContext context = new myapptestContext();
        DomainManager = new EntityDomainManager<TodoItem>(context, Request);

        var claimsPrincipal = this.User as ClaimsPrincipal;
        ClaimsIdentity ci = new ClaimsIdentity();
        string role = "Test"; // get role from Azure SQL database based on user's SID
        ci.AddClaim(new Claim(ClaimTypes.Role, role));
        claimsPrincipal.AddIdentity(ci);
    }

2 个答案:

答案 0 :(得分:3)

如果您打算使用内置身份验证提供程序,则不需要使用Microsoft.Azure.Mobile.Server.Login。内置提供商(AAD,Facebook,Google,Twitter,MSA)将为您处理所有细节。

就自定义声明而言,我没有任何具体指导。你可以将它放在控制器初始化中,或者你可以添加一个注入它的自定义中间件,甚至是Global.asax中的回调。无论哪种方式最适合您和您的应用。

答案 1 :(得分:0)

有一篇很好的文章介绍了如何使用自定义令牌处理程序向Identity添加自定义声明。在处理程序中,用户的角色将添加为声明。

见这里:https://blogs.perficient.com/microsoft/2016/05/how-to-add-custom-claims-to-azure-mobile-app-authentication/