C# 如何使用Azure AD和asp.net MVC保护控制器访问

C# 如何使用Azure AD和asp.net MVC保护控制器访问,c#,asp.net-mvc,entity-framework,azure-active-directory,C#,Asp.net Mvc,Entity Framework,Azure Active Directory,如果我使用Azure AD进行身份验证,我想知道如何正确保护API 据我所知,在控制器上使用[Authorize]需要用户登录。但是,一旦进入,即使我将用户分为多个组,例如: 成员 主持人 管理员 如何确保会员只能访问其帐户信息 我知道我可以和你分开角色 [Authorize(Roles=“Member”)] 但是,这将允许所有成员访问控制器。我怀疑使用邮递员的用户可以获取他们的令牌并从其他成员处查找数据 如何保护控制器,使其仅返回特定用户帐户的数据?控制器将通过实体框架引用SQL server

如果我使用Azure AD进行身份验证,我想知道如何正确保护API

据我所知,在控制器上使用
[Authorize]
需要用户登录。但是,一旦进入,即使我将用户分为多个组,例如:

成员
主持人
管理员

如何确保会员只能访问其帐户信息

我知道我可以和你分开角色

[Authorize(Roles=“Member”)]

但是,这将允许所有成员访问控制器。我怀疑使用邮递员的用户可以获取他们的令牌并从其他成员处查找数据


如何保护控制器,使其仅返回特定用户帐户的数据?控制器将通过实体框架引用SQL server。

我知道的唯一方法是手动创建查询以匹配经过身份验证的用户,因为这是特定于控制器中每个操作检索的数据类型的

例如,要检索经过身份验证的用户名,可以执行以下操作:

[Authorize]
public class MyApiController : ApiController
{

    [HttpGet]
    public IHttpActionResult GetDataForLoggedUser()
    {
        var userName = HttpContext.Current.User.Identity.Name;
        // retrieve data for specific user...
        return Ok();
    }

}

为了检索用户名,您需要
[Authorize]
(至少在您不想在整个控制器中使用它的情况下需要它的操作中,如我的示例所示),否则您将无法检索它。

我只知道手动创建查询以匹配经过身份验证的用户,因为这是特定于控制器中每个操作检索的数据类型的。除非每个用户都有一个单独的数据库,我认为这不是您真正的场景……好的。我可以从用户发送给服务器端的请求中获取userID或GUID吗?尝试在API中调用
HttpContext.Current.user.Identity.Name
,其中包含此
[Authorize(Roles=“Member”)]
属性。这对你有帮助吗?这似乎正是我需要的。把它作为一个答案。谢谢不客气,我很高兴能帮助你。