.net核心应用中使用O365组的代码

时间:2019-02-11 15:58:20

标签: .net-core office365

我正在开发.net核心应用程序,必须集成O365安全组以进行角色分配,有人可以共享示例代码,这将非常有帮助。

我已经使用Azure AD应用程序注册概念进行O365身份验证,并且它可以完美运行。 .net核心应用程序托管在IIS上,通过在浏览器中键入url进行访问时,它将用户重定向到login.microsoftonline.com,一旦通过身份验证,用户便会看到.net核心应用程序的仪表板部分。

不确定如何在.net核心应用程序中将O365组用于权限管理,因此需要一些示例片段,在此先感谢。

2 个答案:

答案 0 :(得分:2)

您既可以在应用程序中查询图形api,也可以模拟用户,以读取用户所在的组,然后使用这些ID过滤视图或您需要执行的操作。

您可以使用“列表memberOf”

https://docs.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0

希望有帮助。

答案 1 :(得分:1)

Office365 security groups可以通过verifying if a user is a member of a security group用于应用程序中的权限管理。您可以将Microsoft Graph API用作MohitVerma suggested

首先,在应用程序中为角色映射定义组(配置文件似乎是个不错的选择)。每个组都有一个唯一的ID,您可以使用例如Office365 or Microsoft Graph并映射到config.json文件中的自定义角色:

{
    "AppRoles": [
        "Admin": "d17a5f86-57f4-48f8-87a0-79761dc8e706",
        "Manager": "9a6a616e-5637-4306-b1fe-bceeaa750873"
    ]
}

然后,在成功登录应用程序后,call the Graph API获取用户所属的所有组。您将获得一个组列表,每个组包含id属性:

GET https://graph.microsoft.com/v1.0/me/memberOf

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryObjects",
    "value": [
        {
            "@odata.type": "#microsoft.graph.directoryRole",
            "id": "43a63cc2-582b-4d81-a79d-1591f91d5558",
            "displayName": "Company Administrator",
            "roleTemplateId": "62e90394-69f5-4237-9190-012177145e10"
        },
        {
            "@odata.type": "#microsoft.graph.group",
            "id": "d17a5f86-57f4-48f8-87a0-79761dc8e706",
            "createdDateTime": "2017-07-31T17:36:25Z",
            "displayName": "Admins group",
            "securityEnabled": true
        }
    ]
}

您可以使用MS Graph SDK for .NET发出请求并从响应中创建组对象:

var userGroups = await graphServiceClient.Me.Groups.Request().GetAsync();

最后,使用自定义角色验证每个组的ID,例如:

public string GetRole(IEnumerable<Group> userGroups, IConfiguration config) 
{
    foreach (var group in userGroups) 
    {
        switch (group.id) 
        {
            case config.GetSection("AppRoles:0"):
                return "Admin";
            case config.GetSection("AppRoles:1"):
                return "Manager";
            default:
                return "Unknown";
        }
    }
}

请确保您的应用grant permissions才能访问Microsoft Graph。