Microsoft Graphでアカウントパスワード変更

Office365のアカウントパスワードを忘れる社員が多いので、なんとか自動化したいなと思い、以下のようなフローでパスワードリセットを行なう仕組みを考えた。

Microsoft Graphを使用してユーザーのパスワードを強制的に再設定するには、下記のように、PasswordProfileを使用する必要がある。Microsoft Graph APIの.ChangePassword()メソッドを使用するには、旧パスワードが必須なため旧パスワードが分からないと、変更できないので・・・

using Microsoft.Graph;
using Azure.Identity;
・・・
var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
var cred = new UsernamePasswordCredential(AdminUsername,AdminPassword,TenantId,ServiceId,options);

// scopeにはUser.ReadWrite.All,Directory.ReadWrite.Allが必要
var graphClient = new GraphServiceClient(cred,scopes);

// テンポラリパスワードの生成
string newPassword = GeneratePassword();
// パスワードの変更
try {
    User user = new User();
    user.PasswordProfile = new PasswordProfile() {
        ForceChangePasswordNextSignIn = true,           // 次のログイン時にパスワード強制変更
        ForceChangePasswordNextSignInWithMfa = false,
        Password = newPassword                          // テンポラリパスワード
    };
    // パスワード情報の更新
    await graphClient.Users[targetaccount]
        .Request()
        .UpdateAsync(user);
} catch (Exception e) {
    Message = $"パスワードリセットに失敗しました。<br/>{e.Message}";
    return;
}

ちなみに、HTTPメソッドはUpdateAsync()=PATCHを使用する。

備忘録として。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: .NET, C#, Microsoft Graph, 技術系 パーマリンク

Microsoft Graphでアカウントパスワード変更 への1件のコメント

  1. takezou のコメント:

    Microsoft Graph APIの仕様がかなり変更されたようで、nugetで取得できる最新版(5.17.0)では、以下のような形になります。

    var request = new User() {
    PasswordProfile = new PasswordProfile() {
    Password = NewPassword,
    ForceChangePasswordNextSignIn = false,
    ForceChangePasswordNextSignInWithMfa = false
    }
    };

    await graphClient.Users[TargetUser].PatchAsync(request);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください