TLDR:我正在寻找一种使用ADFS授权用户登录到我的网站,然后将该用户存储在数据库中以为其分配角色的方法。
我使用以下内容在Visual Studio 2017中使用单一登录创建了基本的ASP.NET MVC 5应用程序。
创建后,我运行了应用程序,并能够成功登录并在默认创建的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中的相同代码时,异步方法导致我的应用程序挂起或返回空值。
我知道我一定会缺少一些简单的东西,而且我敢肯定有一篇文章解释了如何在某处进行此操作。如果有人能指出我正确的方向,那将不胜感激。