使用单一登录进行身份验证,然后使用连接的数据库表进行授权?

时间:2019-04-30 21:51:54

标签: c# asp.net-mvc single-sign-on adfs

TLDR:我正在寻找一种使用ADFS授权用户登录到我的网站,然后将该用户存储在数据库中以为其分配角色的方法。

我使用以下内容在Visual Studio 2017中使用单一登录创建了基本的ASP.NET MVC 5应用程序。

  1. ASP.NET Web应用程序(.Net Framework)C#
  2. 选定的MVC
  3. 选择的工作或学校帐户作为身份验证(我已经选择了组织的ADFS)

创建后,我运行了应用程序,并能够成功登录并在默认创建的UserProfileController中显示用户信息

下面是我的代码

    public async Task<ActionResult> Index()
    {
        string tenantID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
        string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
        try
        {
            Uri servicePointUri = new Uri(graphResourceID);
            Uri serviceRoot = new Uri(servicePointUri, tenantID);
            ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
                  async () => await GetTokenForApplication());

            // use the token for querying the graph to get the user details

            var result = await activeDirectoryClient.Users
                .Where(u => u.ObjectId.Equals(userObjectID))
                .ExecuteAsync();
            //IUser user = result.CurrentPage.ToList().First();
            MyUserViewModel myUserView = new MyUserViewModel();               
            myUserView.user = result.CurrentPage.ToList().First();
            myUserView.groups = GetAllGroupsForUser(activeDirectoryClient, myUserView.user);                              

            return View(myUserView);
        }
        catch (AdalException)
        {
            // Return to error page.
            return View("Error");
        }
        // if the above failed, the user needs to explicitly re-authenticate for the app to obtain the required token
        catch (Exception)
        {
            return View("Relogin");
        }
    }

大多数是使用VS中的向导创建应用程序时创建的预生成代码。

我还在应用程序中使用“用户”和“角色”表创建了一个简单的数据库。

我要确定的问题是如何使用单点登录来验证用户身份,然后在从home控制器呈现任何视图之前,我想像在UserProfileController中一样检查用户的组,以及它们是否匹配一些条件允许他们查看站点。

我似乎找不到代码中实现此目标的位置。当我尝试使用继承AuthorizeizeAttribute的CustomAuthorization类中的UserProfileController中的相同代码时,异步方法导致我的应用程序挂起或返回空值。

我知道我一定会缺少一些简单的东西,而且我敢肯定有一篇文章解释了如何在某处进行此操作。如果有人能指出我正确的方向,那将不胜感激。

0 个答案:

没有答案