Azure Active Directory B2B işbirliği kodu ve PowerShell örnekleriAzure Active Directory B2B collaboration code and PowerShell samples

PowerShell örneğiPowerShell example

.CSV dosyasında depoladığınız e-posta adreslerinden bir kuruluşa harici kullanıcıları toplu davet edebilirsiniz.You can bulk-invite external users to an organization from email addresses that you have stored in a .CSV file.

  1. .CSV dosyasını hazırlayın. Yeni bir CSV dosyası oluşturun ve invitations.csv olarak adlandırın.Prepare the .CSV file Create a new CSV file and name it invitations.csv. Bu örnekte dosya, C:\data konumuna kaydedilir ve şu bilgileri içerir:In this example, the file is saved in C:\data, and contains the following information:

    AdıName InvitedUserEmailAddressInvitedUserEmailAddress
    Gmail B2B DavetlisiGmail B2B Invitee b2binvitee@gmail.com
    Outlook B2B davetlisiOutlook B2B invitee b2binvitee@outlook.com
  2. En son Azure AD PowerShell’i edinin. Yeni cmdlet’leri kullanmak için, Powershell modülünün yayın sayfasından indirebileceğiniz güncelleştirilmiş Azure AD PowerShell modülünü yüklemeniz gerekirGet the latest Azure AD PowerShell To use the new cmdlets, you must install the updated Azure AD PowerShell module, which you can download from the Powershell module's release page

  3. Kiracınızda oturum açmaSign in to your tenancy

    $cred = Get-Credential
    Connect-AzureAD -Credential $cred
    
  4. PowerShell cmdlet’ini çalıştırmaRun the PowerShell cmdlet

    $invitations = import-csv C:\data\invitations.csv
    $messageInfo = New-Object Microsoft.Open.MSGraph.Model.InvitedUserMessageInfo
    $messageInfo.customizedMessageBody = "Hey there! Check this out. I created an invitation through PowerShell"
    foreach ($email in $invitations) {New-AzureADMSInvitation -InvitedUserEmailAddress $email.InvitedUserEmailAddress -InvitedUserDisplayName $email.Name -InviteRedirectUrl https://wingtiptoysonline-dev-ed.my.salesforce.com -InvitedUserMessageInfo $messageInfo -SendInvitationMessage $true}
    

Bu cmdlet, invitations.csv dosyasındaki e-posta adreslerine bir davet gönderir.This cmdlet sends an invitation to the email addresses in invitations.csv. Bu cmdlet’in ek özellikleri arasında şunlar yer alır:Additional features of this cmdlet include:

  • E-posta iletisinde özelleştirilmiş metinCustomized text in the email message
  • Davet edilen kullanıcı için bir görünen ad eklemeIncluding a display name for the invited user
  • CC’ye iletiler gönderme veya e-posta iletilerini topluca gizlemeSending messages to CCs or suppressing email messages altogether

Kod örneğiCode sample

Burada, B2B kullanıcısını davet ettiğiniz kaynağa yönelik kullanım URL’sini almak için “yalnızca uygulama” modunda davet API’sinin nasıl çağrılacağı gösterilmektedir.Here we illustrate how to call the invitation API, in "app-only" mode, to get the redemption URL for the resource to which you are inviting the B2B user. Hedef, özel bir davet e-postası göndermektir.The goal is to send a custom invitation email. E-posta bir HTTP istemcisiyle birleştirilebilir, bu sayede Microsoft Graph API 'SI aracılığıyla nasıl göründüğünü ve gönderebileceğinizi özelleştirebilirsiniz.The email can be composed with an HTTP client, so you can customize how it looks and send it through the Microsoft Graph API.

namespace SampleInviteApp
{
    using System;
    using System.Linq;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Newtonsoft.Json;
    class Program
    {
        /// <summary>
        /// Microsoft Graph resource.
        /// </summary>
        static readonly string GraphResource = "https://graph.microsoft.com";

        /// <summary>
        /// Microsoft Graph invite endpoint.
        /// </summary>
        static readonly string InviteEndPoint = "https://graph.microsoft.com/v1.0/invitations";

        /// <summary>
        ///  Authentication endpoint to get token.
        /// </summary>
        static readonly string EstsLoginEndpoint = "https://login.microsoftonline.com";

        /// <summary>
        /// This is the tenantid of the tenant you want to invite users to.
        /// </summary>
        private static readonly string TenantID = "";

        /// <summary>
        /// This is the application id of the application that is registered in the above tenant.
        /// The required scopes are available in the below link.
        /// https://developer.microsoft.com/graph/docs/api-reference/v1.0/api/invitation_post
        /// </summary>
        private static readonly string TestAppClientId = "";

        /// <summary>
        /// Client secret of the application.
        /// </summary>
        private static readonly string TestAppClientSecret = @"";

        /// <summary>
        /// This is the email address of the user you want to invite.
        /// </summary>
        private static readonly string InvitedUserEmailAddress = @"";

        /// <summary>
        /// This is the display name of the user you want to invite.
        /// </summary>
        private static readonly string InvitedUserDisplayName = @"";

        /// <summary>
        /// Main method.
        /// </summary>
        /// <param name="args">Optional arguments</param>
        static void Main(string[] args)
        {
            Invitation invitation = CreateInvitation();
            SendInvitation(invitation);
        }

        /// <summary>
        /// Create the invitation object.
        /// </summary>
        /// <returns>Returns the invitation object.</returns>
        private static Invitation CreateInvitation()
        {
            // Set the invitation object.
            Invitation invitation = new Invitation();
            invitation.InvitedUserDisplayName = InvitedUserDisplayName;
            invitation.InvitedUserEmailAddress = InvitedUserEmailAddress;
            invitation.InviteRedirectUrl = "https://www.microsoft.com";
            invitation.SendInvitationMessage = true;
            return invitation;
        }

        /// <summary>
        /// Send the guest user invite request.
        /// </summary>
        /// <param name="invitation">Invitation object.</param>
        private static void SendInvitation(Invitation invitation)
        {
            string accessToken = GetAccessToken();

            HttpClient httpClient = GetHttpClient(accessToken);

            // Make the invite call.
            HttpContent content = new StringContent(JsonConvert.SerializeObject(invitation));
            content.Headers.Add("ContentType", "application/json");
            var postResponse = httpClient.PostAsync(InviteEndPoint, content).Result;
            string serverResponse = postResponse.Content.ReadAsStringAsync().Result;
            Console.WriteLine(serverResponse);
        }

        /// <summary>
        /// Get the HTTP client.
        /// </summary>
        /// <param name="accessToken">Access token</param>
        /// <returns>Returns the Http Client.</returns>
        private static HttpClient GetHttpClient(string accessToken)
        {
            // setup http client.
            HttpClient httpClient = new HttpClient();
            httpClient.Timeout = TimeSpan.FromSeconds(300);
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            httpClient.DefaultRequestHeaders.Add("client-request-id", Guid.NewGuid().ToString());
            Console.WriteLine(
                "CorrelationID for the request: {0}",
                httpClient.DefaultRequestHeaders.GetValues("client-request-id").Single());
            return httpClient;
        }

        /// <summary>
        /// Get the access token for our application to talk to Microsoft Graph.
        /// </summary>
        /// <returns>Returns the access token for our application to talk to Microsoft Graph.</returns>
        private static string GetAccessToken()
        {
            string accessToken = null;

            // Get the access token for our application to talk to Microsoft Graph.
            try
            {
                AuthenticationContext testAuthContext =
                    new AuthenticationContext(string.Format("{0}/{1}", EstsLoginEndpoint, TenantID));
                AuthenticationResult testAuthResult = testAuthContext.AcquireTokenAsync(
                    GraphResource,
                    new ClientCredential(TestAppClientId, TestAppClientSecret)).Result;
                accessToken = testAuthResult.AccessToken;
            }
            catch (AdalException ex)
            {
                Console.WriteLine("An exception was thrown while fetching the token: {0}.", ex);
                throw;
            }

            return accessToken;
        }

        /// <summary>
        /// Invitation class.
        /// </summary>
        public class Invitation
        {
            /// <summary>
            /// Gets or sets display name.
            /// </summary>
            public string InvitedUserDisplayName { get; set; }

            /// <summary>
            /// Gets or sets display name.
            /// </summary>
            public string InvitedUserEmailAddress { get; set; }

            /// <summary>
            /// Gets or sets a value indicating whether Invitation Manager should send the email to InvitedUser.
            /// </summary>
            public bool SendInvitationMessage { get; set; }

            /// <summary>
            /// Gets or sets invitation redirect URL
            /// </summary>
            public string InviteRedirectUrl { get; set; }
        }
    }
}

Sonraki adımlarNext steps