我们目前正在尝试对我们的网站进行更改,以便使用Auth0进行身份验证。作为其中的一部分,我正在重写我们用于管理用户的“配置”网站。用户现在将存储在Auth0中,因此配置网站必须能够在我的租户中添加和编辑Auth0用户。
配置网站使用Auth0 Management API nuget包:https://github.com/auth0/auth0.net
但我遇到了一个问题。我可以获得用户列表,我可以创建一个用户。我可以获取用户的详细信息并在屏幕上以编辑形式显示它们,但我无法保存所做的更改,因为当我尝试这样做时,我得到一个错误,我需要在UserUpdateRequest中提供密码。
但是当我得到用户的详细信息(client.Users.GetAsync(id))时,它不会给我一个密码属性。如果我可以从GetAsync(id)调用中获取密码,那么我可以将其添加到UserUpdateRequest。但是,如果我无法从GetAsync获取密码,我如何将密码放入UserUpdateRequest?我该如何保存用户?
我想我的最终问题是:如何使用Management API获取用户密码...以便稍后在调用Users.UpdateAsync时可以将其提供给UserUpdateRequest模型。或者如果我无法获得用户的密码,我可以在不知道密码的情况下以某种方式更新用户吗?
看起来Nuget Management API期望用户自己使用此方法(因此他们可以输入密码来更改其详细信息),而不是通过配置/管理网站运行的管理员用户知道用户密码。
C#User / Edit [HttpGet]动作方法,以获取用户并显示它们:
var token = GetAccessToken();
var apiClient = new ManagementApiClient(token, new Uri("https://MY_TENANT_ID.au.auth0.com/api/v2"));
var user = await apiClient.Users.GetAsync(id);
var userModel = MapUserToUserModel(user);
return View(userModel);
C#User / Edit [HttpPost]操作方法,用于保存对用户详细信息的更改:
var token = GetAccessToken();
var apiClient = new ManagementApiClient(token, new Uri("https://MY_TENANT_ID.au.auth0.com/api/v2"));
var updateReq = new UserUpdateRequest()
{
UserName = model.UserId,
Email = model.Email,
Password = model.Password,
EmailVerified = model.EmailVerified,
AppMetadata = model.AppMetadata,
UserMetadata = model.UserMetadata
};
var user = await apiClient.Users.UpdateAsync(model.UserId, updateReq);