c# - 无法重置没有特定角色的登录用户的密码
问题描述
我有一个在 Azure Functions 中运行的 C# 应用程序,我需要使用用户名\密码凭据更改特定用户的密码。
我的应用程序使用 MSAL 进行身份验证 ( https://github.com/AzureAD/microsoft-authentication-library-for-dotnet )
为了获得使用用户名\密码流进行身份验证的能力,使用此选项:https ://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Username-Password-Authentication 。
我正在使用 Graph API 来更改用户的密码(https://docs.microsoft.com/en-us/graph/api/user-update?view=graph-rest-1.0&tabs=http)
仅当我授予用户以下内置分配角色之一时,我才设法以这种方式重置密码:
密码管理员、帮助台管理员、身份验证管理员、用户管理员、特权身份验证管理员、全局管理员
但是如果我不给用户一个这些角色,它会在尝试使用 PATCH 请求更新用户时收到以下错误消息https://graph.microsoft.com/v1.0/users/####### #-####-####-####-########
消息:{“错误”:{“代码”:“Authorization_RequestDenied”,“消息”:“权限不足,无法完成操作。”,“innerError”:{“日期”:“2021-04-07T12:56:56” , "request-id": "########-#####-#####-#####-#####", "client-request-id": "########-####-####-####-########" } } }
我的问题是我不想将这些权限授予任何用户只是为了更改自己的密码,因为这些角色太强大了。
对我来说,用户无法使用该流程更改自己的密码是没有意义的,因为使用 PowerShell,例如,Update-AzureADSignedInUserPassword
用户可以使用并且不需要特殊角色。为什么当我尝试对我的流程执行相同的操作时角色会影响它。任何想法如何克服这个问题,我做错了什么,或者在那个流程中甚至可能吗?
提前谢谢
解决方案
尝试使用changePassword
端点应该满足您的要求。您无需授予用户任何管理员角色。
POST https://graph.microsoft.com/v1.0/me/changePassword
Content-Type: application/json
{
"currentPassword": "Test1234!",
"newPassword": "Test5678!"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var currentPassword = "{currentPassword}";
var newPassword = "{newPassword}";
await graphClient.Me
.ChangePassword(currentPassword,newPassword)
.Request()
.PostAsync();
推荐阅读
- reactjs - 如何使用react router dom将目录组件替换为详细的项目组件?
- git - 特定提交的 Git-merge 和 Git-cherry-pick 有什么区别?
- reactjs - 如何识别在 react-router 中加载了哪个开关组件
- php - 用户个人资料未更新用户信息
- python - 解析具有多个对象的动态Json文件并在python中插入字典
- python - 将嵌套列表合并到列表元组列表中的组中
- swift - 无法在表格视图中选择单元格 - swift
- unit-testing - 是否可以使用类型类将 `ReaderT (IO a) IO a` 更改为 `ReaderT (ia) IO a`?
- vega-lite - 是否可以创建与 Altair/Vega-Lite 中的选择过滤器一起使用的自定义聚合?
- php - 更改复选框选择的 div 颜色