Azure AD GraphServiceClient无法针对用户设置AdditionalData

时间:2018-12-07 13:57:07

标签: c# azure-active-directory azure-ad-graph-api

我正在将GraphServiceClient与.Net Core 2配合使用。我正在尝试使用以下代码向我的用户添加AdditionalData

var updated = new User()
                {
                   AdditionalData = new Dictionary<string, object>
                    {
                        {"OtherEmail", otherEmail},
                        {"OtherRole", otherRole}
                    },
                };

                await _graphClient.Users[user.Id].Request().UpdateAsync(updated);

执行此操作时,出现以下错误

  

Microsoft.Graph.ServiceException:代码:Request_BadRequest消息:   指定的一个或多个属性值无效。

有人知道我在做什么错吗?

如果有人可以告诉我如何将自己的一些元数据保存给用户,将不胜感激。我也尝试过使用扩展程序,但是遇到了这个问题。

Azure AD GraphServiceClient Extensions not working

2 个答案:

答案 0 :(得分:0)

所以我使用OpenExtensions解决了这个问题,这也给我带来了很多问题,可以在这里看到。

Azure AD GraphServiceClient Extensions not working

技巧是添加这样的扩展名

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        physicsWorld.gravity = CGVector(dx:0, dy:0)

        let ball = SKSpriteNode.init(color: .red, size: CGSize(width: 50, height: 50))
        ball.physicsBody = SKPhysicsBody.init(circleOfRadius: ball.size.width/2)
        ball.position = CGPoint(x: 0, y: 0)

        buildWall()

        addChild(ball)

        ball.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 50))
    }

    func buildWall() {
        let xStart : CGFloat = ((scene?.size.width)!/2) * -0.9
        var brickPosition = CGPoint(x: xStart, y: 500)
        let brickSize = CGSize(width: 20, height:20)

        for wallRow in 1...10 {
            for wallColumn in 1...30 {
                let brick = SKSpriteNode(color: .yellow, size: brickSize)
                brick.physicsBody = SKPhysicsBody.init(rectangleOf: brick.size)

                brick.position = brickPosition

                addChild(brick)
                brickPosition.x += brickSize.width + 1
            }
            brickPosition.x = xStart
            brickPosition.y -= 11
        }
    }
}

然后像这样检索它们。

extension = new OpenTypeExtension
                {
                    ExtensionName = AzureADExtensions.UserConstants.ExtensionName,
                    AdditionalData = new Dictionary<string, object>
                    {
                        {"OtherEmail", externalUser.Email},
                        {"OtherRole" , externalUser.Roles.FirstOrDefault()}
                    }
                };

                await _graphClient.Users[user.Id].Extensions.Request()
                    .AddAsync(extension);

希望对某人有帮助!

答案 1 :(得分:0)

要将属性添加到AdditionalData字段中,必须在 Azure AD B2C>用户属性(在Azure门户中)中定义属性。例如,如果您创建一个 Boolean 属性Dummy,则将创建字段extension_{b2c-extensions-app-id}_Dummy,其中{b2c-extensions-app-id}是该对象的 Application ID 。导航到 Azure AD B2C>应用程序注册(预览)> b2c-extensions-app ,并从ID中删除破折号(b2c-extensions-app),可以自动生成-

这将允许您执行以下操作:

var updated = new User()
    {
        AdditionalData = new Dictionary<string, object>
        {
            {"extension_0000000000000000000000000000_Dummy", false}
        },
    };

await _graphClient.Users[user.Id].Request().UpdateAsync(updated);