我正在学习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);
}
答案 0 :(得分:3)
如果您打算使用内置身份验证提供程序,则不需要使用Microsoft.Azure.Mobile.Server.Login。内置提供商(AAD,Facebook,Google,Twitter,MSA)将为您处理所有细节。
就自定义声明而言,我没有任何具体指导。你可以将它放在控制器初始化中,或者你可以添加一个注入它的自定义中间件,甚至是Global.asax中的回调。无论哪种方式最适合您和您的应用。
答案 1 :(得分:0)
有一篇很好的文章介绍了如何使用自定义令牌处理程序向Identity添加自定义声明。在处理程序中,用户的角色将添加为声明。