azure 下一个身份验证Active Directory覆盖配置文件(包含用户信息)

inn6fuwd  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在使用下一个身份验证通过Azure Active Directory进行身份验证。我可以成功执行此操作,但配置文件对象不包含我需要的某些信息。
我正在尝试获取“用户类型”和“帐户状态”属性。
这是我的密码

providers: [
    AzureADProvider({
        clientId: process.env.AZURE_AD_CLIENT_ID,
        clientSecret: process.env.AZURE_AD_CLIENT_SECRET,
        tenantId: process.env.AZURE_AD_TENANT_ID,
        userinfo: {
            url: 'https://graph.microsoft.com/v1.0/me/',
            params: {
                scope: 'https://graph.microsoft.com/user.read',
                grant_type: 'authorization_code'
            },
        },
    })
]

我不知道在这之后该怎么办,甚至不知道这是否是我应该做的。任何帮助都是感激的。
更新:以下是我修改后的建议

providers: [
    AzureADProvider({
        clientId: process.env.AZURE_AD_CLIENT_ID,
        clientSecret: process.env.AZURE_AD_CLIENT_SECRET,
        tenantId: process.env.AZURE_AD_TENANT_ID,
        userinfo: {
            url: 'https://graph.microsoft.com/v1.0/me?$select=accountEnabled,userType,displayName,givenName,objectId,email,surname',
            params: {
                scope: 'https://graph.microsoft.com/user.read',
                grant_type: 'authorization_code',
            },
        },
        profile(profile) {
            return {
                id: profile.objectId,
                name: profile.displayName,
                lastName: profile.surname,
                firstName: profile.givenName,
                email: profile.email,
                userType: profile.userType,
                accountStatus: profile.accountEnabled
            };
        }
    })]

由于id令牌的原因,AzureADProvider中的配置文件数据似乎仍在使用。我以为userinfo会覆盖它,但它似乎不会那样工作,除非我做错了。

yh2wf1be

yh2wf1be1#

我尝试在我的环境中重现相同的结果,结果如下:

我创建了Azure AD应用程序并授予了API权限:

我使用授权代码流生成了访问令牌,使用的参数如下:

GET https://login.microsoftonline.com/TenantId/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/user.read
grant_type:authorization_code
redirect_uri:RedirectUri
code:code

当我运行与您相同的查询时,我无法获得userTypeaccount status属性,如下所示:

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

    • 注意**:默认情况下,只返回业务电话、显示名称、给定名称、id、职务、邮件、移动电话、办公地点、首选语言、姓氏、用户主体名称属性。

要获取其他用户属性,请使用**$select**,如下所示:

GET https://graph.microsoft.com/v1.0/me?$select=accountEnabled,userType

    • 修改代码如下:**
providers: [
    AzureADProvider({
        clientId: process.env.AZURE_AD_CLIENT_ID,
        clientSecret: process.env.AZURE_AD_CLIENT_SECRET,
        tenantId: process.env.AZURE_AD_TENANT_ID,
        userinfo: {
            url: 'https://graph.microsoft.com/v1.0/me?$select=accountEnabled,userType',
            params: {
                scope: 'https://graph.microsoft.com/user.read',
                grant_type: 'authorization_code'
            },
        },
    })
]

相关问题