Azure ADでユーザーを作成するには、Microsoft GraphAPIを呼び出す必要があります。
最初にコンソールアプリケーションからテストし、次にAzure関数に実装する必要があります。
https://developer.Microsoft.com/en-us/graph/graph-Explorer
Microsoft Graph APIを初めて使用します。c#コンソールアプリケーションからAPIに接続して実行するにはどうすればよいですか。
私はすでにアプリケーションをAADに登録しています。
私はトークンを次のように取得しようとしています:
string resourceId = "https://graph.Microsoft.com";
string tenantId = "<tenantID>";
string authString = "https://login.microsoftonline.com/" + tenantId;
string upn = String.Empty;
string clientId = "<ClientID>";
string clientSecret = "<clientSecret>";
//string clientSecret = ConfigurationManager.AppSettings["clientSecret"];
log.Verbose("ClientSecret=" + clientSecret);
log.Verbose("authString=" + authString);
var authenticationContext = new AuthenticationContext(authString, false);
// Config for OAuth client credentials
ClientCredential clientCred = new ClientCredential(clientId, clientSecret);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resourceId,clientCred);
string token = authenticationResult.AccessToken;
log.Verbose("token=" + token);
既存のAADB2Cを使おうとしています。 b2c-extensions-app。変更しないでください。 AADB2Cがユーザーデータを保存するために使用します。
例外も取得もアクセストークンも取得せず、プログラムはサイレントに終了します
また:
新しい図書館があります
<package id="Microsoft.Identity.Client" version="1.1.0-preview" targetFramework="net46" />
次のログインポップアップなしで直接ログインしてトークンを取得するにはどうすればよいですか? PublicClientApplication
コンソールアプリから接続するには、最初に有効なトークンを取得する必要があります。 UIがないので、 ユーザーなしでアクセスを取得する を実行する必要があります。 このタイプの「アプリのみ」のトークンは、使用する前に 管理者の同意 が必要であることに注意してください。
Create User シナリオをサポートするには、 permission scopes include ser.ReadWrite.All であることを確認する必要があります。
有効なトークンを取得したら、GraphAPIを呼び出すことができます。グラフはREST APIであるため、すべての呼び出しは、承認ヘッダー内で渡されたトークンを使用してHTTP経由で行われます。
一般的な概要は Microsoft GraphとRESTの使用を開始する で読むことができます。利用可能な言語/フレームワーク固有の概要もいくつかありますが、それらはすべて、UIがあることを前提としています(つまり、単なるコンソールではありません)。一般的に言って、ユーザーを作成するためのコンソールツールを探している場合は、 PowerShell を使用することをお勧めします。
管理者の同意が付与されたAzureADアプリケーションが既にあることを前提としています。
コンソールアプリから接続するには、最初に有効なトークンを取得する必要があります。 UIがないため、ユーザーなしでアクセスできるようにする必要があります。このタイプの「アプリのみ」のトークンは、使用する前に管理者の同意が必要であることに注意してください。
次に、2つのNuGet
依存関係をdotnet
プロジェクトに追加する必要があります
<PackageReference Include="Microsoft.Graph" Version="1.15.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.0.0" />
Microsoft.Identity.Client
AzureADを使用した認証用およびMicrosoft.Graph
MSグラフクエリを実行します。
var tenantId = "you-Azure-tenand-id";
var clientId = "Azure-ad-application-id";
var clientSecret = "unique-secret-generated-for-this-console-app";
// Configure app builder
var authority = $"https://login.microsoftonline.com/{tenantId}";
var app = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.Build();
// Acquire tokens for Graph API
var scopes = new[] {"https://graph.Microsoft.com/.default"};
var authenticationResult = await app.AcquireTokenForClient(scopes).ExecuteAsync();
// Create GraphClient and attach auth header to all request (acquired on previous step)
var graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(requestMessage => {
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("bearer", authenticationResult.AccessToken);
return Task.FromResult(0);
}));
// Call Graph API
var user = await graphClient.Users["[email protected]"].Request().GetAsync()
更新2020.01
新しいパッケージがありますMicrosoft.Graph.Auth
認証とトークン管理を簡素化します。
今回はベータAPIを使用したいとします。
<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.2" />
<PackageReference Include="Microsoft.Graph.Beta" Version="0.12.0-preview" />
var tenantId = "you-Azure-tenand-id";
var clientId = "Azure-ad-application-id";
var clientSecret = "unique-secret-generated-for-this-console-app";
// Configure application
var clientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantId)
.WithClientSecret(clientSecret)
.Build();
// Create ClientCredentialProvider that will manage auth token for you
var authenticationProvider = new ClientCredentialProvider(clientApplication);
var graphClient = new GraphServiceClient(authenticationProvider);
// Call Graph API
var user = await graphClient.Users["[email protected]"].Request().GetAsync()
この MSALコンソールアプリチュートリアル は、.NETコンソールアプリでMSAL(Microsoft認証ライブラリ)を使用してトークンを取得する方法について説明しています。
Microsoft Graph呼び出しを行うために、RunAsync()関数をこれに置き換えました。これは、取得したトークンをGraphServiceClientを使用して要求に添付します。
static async Task RunAsync()
{
const string clientId = "your client id";
string[] scopes = { "User.Read" };
AuthenticationResult result;
var clientApp = new PublicClientApplication(clientId);
try
{
result = await clientApp.AcquireTokenAsync(scopes.Split(new char[] { ' ' }));
Console.WriteLine(result.AccessToken);
GraphServiceClient graphClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
async (requestMessage) =>
{
// Append the access token to the request.
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", result.AccessToken);
// Some identifying header
requestMessage.Headers.Add("SampleID", "aspnet-connect-sample");
}));
// Get a page of mail from the inbox
var inboxMail = await graphClient.Me.MailFolders.Inbox.Messages.Request().GetAsync();
foreach(var mail in inboxMail.CurrentPage.ToList())
{
Console.Write("From: {0}\nSubject: {1}\nBody:\n{2}\n--------------------\n", mail.From.EmailAddress.Address, mail.Subject, mail.BodyPreview);
}
}
// Unable to retrieve the access token silently.
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
この質問はかなり古いものですが、最初に同じことをする必要があったときに最初に出てきた質問の1つでした。以下に、それを実現するために使用した手順とリソースを示します。
そのリポジトリのコードには、.NETCore2.1以降ConfigurationBuilderに存在しなくなったメソッドがいくつか呼び出されています。私はこれらの行を置き換えました(おそらくより良い/より短い方法があります):
authenticationConfig.Tenant = Configuration.GetSection( "Tenant")。Value.ToString(); authenticationConfig.ClientId = Configuration.GetSection( "ClientId")。Value.ToString(); authenticationConfig.ClientSecret = Configuration.GetSection( "ClientSecret")。Value.ToString();
これで、テナント内のユーザーを反復処理する必要があります。グラフエクスプローラー( https://developer.Microsoft.com/en-us/graph/graph-Explorer )に移動して、さらにURLを見つけることができます(Program.csで行を見つけてそれらを置き換えます) )。私の知る限り、APIのv2.0は「ベータ」です(「ベータ」を「v1.0」の場所に置いてください。間違っている場合は誰かが訂正してください)。
apiCaller.CallWebApiAndProcessResultASync( " https://graph.Microsoft.com/v1.0/users "、result.AccessToken、Display);を待ちます。
注意
Azure AD B2Cディレクトリ内のユーザーを管理するには、Azure AD GraphAPIを使用する必要があります。これは、Microsoft GraphAPIとは異なります。詳細 ここ 。
かなり良いサンプルプロジェクト@GitHubがあります: AzureADQuickStarts/B2C-GraphAPI-DotNet そしてそれに付随するドキュメント ここ 。