代码之家  ›  专栏  ›  技术社区  ›  Shelby115

如何通过Azure广告检查用户是否在广告组中?

  •  1
  • Shelby115  · 技术社区  · 6 年前

    • .NET 4.5.1 MVC项目
    • 项目包含.aspx文件(旧版)
    • Azure门户(通过应用程序注册)配置了“隐式授权ID令牌”和“仅此组织目录中的帐户”
    • 本地广告组被推到Azure广告。

    // COOKIES: Tells it to use cookies for authentication.
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        CookieManager = new SystemWebCookieManager()
    });
    
    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
    {
        ClientId = ClientID,
        Authority = Authority,
        PostLogoutRedirectUri = PostLogoutRedirectUri,
        Notifications = new OpenIdConnectAuthenticationNotifications()
        {
            AuthenticationFailed = PrincipalService.OnAzureAuthenticationFailure,
            AuthorizationCodeReceived = (AuthorizationCodeReceivedNotification notification) =>
            {
                var username = notification.AuthenticationTicket.Identity.Name.Split('#').LastOrDefault();
                var emailAddress = notification.AuthenticationTicket.Identity.Claims.FirstOrDefault(x => x.Type.Contains("emailaddress"))?.Value;
                Logger.Log(Level.Auth, $"Azure login success! Username: '{username}' Email: '{emailAddress}'.");
                return Task.FromResult(0);
            }
        }
    });
    

    问题

    我试过的

    GetAccountsAsync 返回空的等)。

    "optionalClaims": {
        "idToken": [
            {
                "name": "email",
                "source": null,
                "essential": true,
                "additionalProperties": []
            },
            {
                "name": "groups",
                "source": null,
                "essential": true,
                "additionalProperties": []
            }
        ],
        "accessToken": [],
        "saml2Token": []
    }
    

    email 很好,但很明显 groups 因为那是在黑暗中拍摄的。

    0 回复  |  直到 6 年前
        1
  •  8
  •   Community CDub    4 年前

    1作为令牌的一部分获取组成员资格声明

    您可以通过编辑应用程序的清单(这可以直接在Azure门户中完成)和设置,使组声明成为应用程序访问令牌的一部分 "groupMembershipClaims" "All" "SecurityGroup" 根据需要。

    2组ID作为索赔的一部分返回

    一旦应用程序清单如上所述被更新,您就可以将组Id作为声明的一部分。下面是一个解码的JWT令牌的快速示例

    enter image description here

    三。限制可以作为令牌的一部分返回的组数

    为了确保令牌大小不超过HTTP头大小限制,Azure AD限制了它在groups声明中包含的objectid的数量。如果用户是超过超龄限制的组的成员(150代表SAML令牌,200代表JWT令牌),那么Azure AD不会在令牌中发出组声明。相反,它在令牌中包含一个overage声明,该声明指示应用程序查询Graph API以检索用户的组成员身份。

    4相关的Microsoft Graph API

    注意:使用microsoftgraphapi可能非常强大,因为您可以绕过超龄场景,还可以根据需要获取有关组的所有其他类型的信息(如名称)。在这种特殊情况下,因为目的是验证组成员身份,所以组Id是最好的字段,因为它不会更改,而像name这样的其他字段可以更改。

    Check member groups

    如果您已经知道要检查/验证其成员资格的组,则此选项将非常有用。

     POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/checkMemberGroups 
    

    在请求正文中,您可以提供 groupdIds

         {
          "groupIds": [
               "fee2c45b-915a-4a64b130f4eb9e75525e",
               "4fe90ae065a-478b9400e0a0e1cbd540"
           ]
         }
    

    user: getMemberGroups

    如果您还不知道该组,并且希望获取该用户所属的所有组,则此选项将非常有用。

    POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
    

    related SO Post

    推荐文章