適用対象:
ワークフォース テナント (詳細)
この記事には、アプリケーションの座標を使用してコードを構成するのに役立つ手順が含まれています。
[前提条件]
-
この組織のディレクトリ内のアカウント専用に構成された Microsoft Entra 管理センターに新しいアプリを登録します。 詳細については、「 アプリケーションの登録 」を参照してください。 後で使用するために、アプリケーション の [概要 ] ページから次の値を記録します。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
プラットフォーム リダイレクト URI を追加する
アプリの登録にアプリの種類を指定するには、次の手順に従います。
- [管理] で、認証>プラットフォームの追加>Mobile およびデスクトップ アプリケーションを選択します
- 使用している認証方法に応じて、次のいずれかのオプションを選択します。
- 埋め込みブラウザーを使用するアプリの場合は、正確な値を使用します。
https://login.microsoftonline.com/common/oauth2/nativeclient - システム ブラウザーを使用するアプリの場合は、正確な値を使用します。
http://localhost - macOS 用の Objective-C または Swift アプリ:
msauth.<your.app.bundle.id>://auth。 - Node.js Electron アプリケーション:
msal{Your_Application/Client_Id}://auth
- 埋め込みブラウザーを使用するアプリの場合は、正確な値を使用します。
注
Web 認証マネージャー (WAM) アプリの場合、MSAL ではリダイレクト URI は必要ありません。
パブリック クライアント フローを有効にする
デバイス コード フロー、統合 Windows 認証、およびユーザー名とパスワードをデーモン アプリケーションで使用されるクライアント資格情報フローを使用した機密クライアント アプリケーションと区別するために、これらはリダイレクト URI を必要としないので、パブリック クライアント アプリケーションとして構成します。 この構成を実現するには
アプリをパブリック クライアントとして識別するには、次の手順に従います。
[管理] で、 [認証] を選択します。
[詳細設定] で、[パブリック クライアント フローを許可する] に対して [はい] を選択します。
[保存] を選択して変更を保存します。
デスクトップ アプリをサポートする Microsoft ライブラリ
次の Microsoft ライブラリはデスクトップ アプリをサポートしています。
| 言語/フレームワーク | プロジェクト GitHub |
Package | 取得 started |
ユーザーのサインイン | Web API へのアクセス | 一般提供 (GA) または パブリック プレビュー1 |
|---|---|---|---|---|---|---|
| Electron | MSAL Node.js | msal-node | — |
|
|
パブリック プレビュー |
| Java | MSAL4J | msal4j | — |
|
|
GA |
| macOS (Swift/Obj-C) | iOS および macOS 用の MSAL | MSAL | チュートリアル |
|
|
GA |
| UWP | MSAL.NET | Microsoft.Identity.Client | チュートリアル |
|
|
GA |
| WPF | MSAL.NET | Microsoft.Identity.Client | チュートリアル |
|
|
GA |
1オンライン サービスのユニバーサル ライセンス条項は、"パブリック プレビュー" のライブラリに適用されます。
パブリック クライアント アプリケーション
コードの観点から、デスクトップ アプリケーションは、パブリック クライアント アプリケーションです。 対話型認証を使用するかどうかによって、構成は少し異なります。
MSAL.NET IPublicClientApplication を作成して操作する必要があります。
コードで排他的に
以下のコードでは、パブリック クライアント アプリケーションをインスタンス化して、職場または学校アカウントあるいは個人用 Microsoft アカウントを使用して、Microsoft Azure のパブリック クラウドにユーザーをサインインさせます。
IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
.Build();
前述のように、対話型認証またはデバイス コード フローを使用する場合は、.WithRedirectUri 修飾子を使用します。
IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
.WithDefaultRedirectUri()
.Build();
構成ファイルを使用する
次のコードは、(プログラムで入力、または構成ファイルから読み取られる) 構成オブジェクトからパブリック クライアント アプリケーションをインスタンス化します。
PublicClientApplicationOptions options = GetOptions(); // your own method
IPublicClientApplication app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
.WithDefaultRedirectUri()
.Build();
より詳細な構成
多数の修飾子を追加して、アプリケーションの構築を細かく設定できます。 たとえば、お使いのアプリケーションを各国のクラウド (ここで示した米国政府など) のマルチテナント アプリケーションにする場合、次のように記述できます。
IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
.WithDefaultRedirectUri()
.WithAadAuthority(AzureCloudInstance.AzureUsGovernment,
AadAuthorityAudience.AzureAdMultipleOrgs)
.Build();
MSAL.NET には、Active Directory フェデレーション サービス (AD FS) 2019 の修飾子も含まれています。
IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
.WithAdfsAuthority("https://consoso.com/adfs")
.Build();
最後に、Azure Active Directory (Azure AD) B2C テナントのトークンを取得する場合は、次のコード スニペットで示されているとおり、お使いのテナントを指定します。
IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
.WithB2CAuthority("https://fabrikamb2c.b2clogin.com/tfp/{tenant}/{PolicySignInSignUp}")
.Build();
詳細情報
MSAL.NET デスクトップ アプリケーションを構成する方法の詳細については、以下のとおりです。
-
PublicClientApplicationBuilderで使用可能なすべての修飾子の一覧については、リファレンス ドキュメント PublicClientApplicationBuilder を参照してください。 -
PublicClientApplicationOptionsに公開されているすべてのオプションの説明については、リファレンス ドキュメント内の PublicClientApplicationOptions を参照してください。
構成オプションを使用した詳細な例
次のような appsettings.json 構成ファイルを使用する .NET コンソール アプリケーションについて考えます。
{
"Authentication": {
"AzureCloudInstance": "AzurePublic",
"AadAuthorityAudience": "AzureAdMultipleOrgs",
"ClientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
},
"WebAPI": {
"MicrosoftGraphBaseEndpoint": "https://graph.microsoft.com"
}
}
.NET で提供される構成フレームワークを使用して、このファイル内で読み取るコードはほとんどありません。
public class SampleConfiguration
{
/// <summary>
/// Authentication options
/// </summary>
public PublicClientApplicationOptions PublicClientApplicationOptions { get; set; }
/// <summary>
/// Base URL for Microsoft Graph (it varies depending on whether the application runs
/// in Microsoft Azure public clouds or national or sovereign clouds)
/// </summary>
public string MicrosoftGraphBaseEndpoint { get; set; }
/// <summary>
/// Reads the configuration from a JSON file
/// </summary>
/// <param name="path">Path to the configuration json file</param>
/// <returns>SampleConfiguration as read from the json file</returns>
public static SampleConfiguration ReadFromJsonFile(string path)
{
// .NET configuration
IConfigurationRoot Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(path);
Configuration = builder.Build();
// Read the auth and graph endpoint configuration
SampleConfiguration config = new SampleConfiguration()
{
PublicClientApplicationOptions = new PublicClientApplicationOptions()
};
Configuration.Bind("Authentication", config.PublicClientApplicationOptions);
config.MicrosoftGraphBaseEndpoint =
Configuration.GetValue<string>("WebAPI:MicrosoftGraphBaseEndpoint");
return config;
}
}
ここで、アプリケーションを作成するために、次のコードを記述します。
SampleConfiguration config = SampleConfiguration.ReadFromJsonFile("appsettings.json");
var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(config.PublicClientApplicationOptions)
.WithDefaultRedirectUri()
.Build();
.Build() メソッドを呼び出す前に、前述のように .WithXXX メソッドを呼び出すことで構成を上書きできます。
次のステップ
このシナリオの次の記事であるデスクトップ アプリのトークンの取得に関する記事に進みます。