Table of contents
TOC
İçindekiler tablosunu daralt
İçindekiler tablosunu genişlet

Reklam FS üzerinde-adına-, kimlik doğrulama Windows Server 2016

Bill Mathers|Son Güncellenme Tarihi: 10.03.2017
|
1 Katkıda Bulunan

İçin geçerlidir: Windows Server 2016

Bu gözden geçirme Kılavuzu AD FS'de kullanarak bir üzerinde-adına-of (OBO) kimlik doğrulaması uygulamak için yönergeler sağlar Windows Server 2016 TP5. O okuyun OBO kimlik doğrulama hakkında daha fazla bilgi edinin Reklam FS senaryoları geliştiriciler için

WARNING: The example that you can build here is for educational purposes only. These instructions are for the simplest, most minimal implementation possible to expose the required elements of the model. Örnek hata işleme tüm yönlerini içermeyebilir ve diğer ilişkilendirebilirsiniz işlevini ve açık başarılı bir OBO kimlik doğrulama alma YALNIZCA odaklanır.

Genel bakış

Bu örnek burada bir istemci orta katman Web hizmeti erişim sağlayacak ve web hizmeti sonra bir erişim simgesi almak için doğrulanmış istemci adına hareket edecek bir kimlik doğrulama akışı oluşturacağız.

REKLAM FS OBO

Örnek ulaşacaksınız kimlik doğrulaması akışı aşağıdadır

  1. İstemci kimlik doğrulaması ADFS yetkilendirme son noktasına ve yetkilendirme kodu ister
  2. Yetkilendirme son nokta için istemci kimlik doğrulama kodu verir
  3. İstemci kimlik doğrulama kodu kullanır ve WebAPI olarak orta katman Web hizmeti için isteği erişim simgesi için AD FS belirteç son noktasına sunar
  4. AD FS orta katman Web hizmetine erişim belirteci döndürür. Ek işlevsellik için Orta katmanı hizmet erişmek için arka uç WebAPI gerekir
  5. İstemci erişim simgesi orta katman hizmetini kullanmak için kullanır.
  6. Orta katman hizmeti ADFS belirteç bitiş noktasına erişim simgesi sağlar ve istekleri belirteci üzerinde-adına-, arka uç WebAPI için doğrulanmış kullanıcı erişin
  7. AD FS erişim belirteci arka uç WebAPI için Orta katmanı hizmet actiing için istemcisi olarak döndürür
  8. Orta katmanı hizmet adım 7 AD FS'de tarafından sağlanan erişim simgesi arka uca WebAPI istemcisi olarak erişmek ve gerekli işlevleri gerçekleştirmek için kullanır.

Örnek Yapı

Örnek üç modülü kapsayacak

ModülüAçıklama
ToDoClientYerel kullanıcı ile etkileşim istemcisi
ToDoServiceOrta katman web arka uca WebAPI için bir istemci gören API
WebAPIOBOArka uç web ToDoService tarafından kullanıcı bir ToDoItem ekler gerekli işlem için kullanılan API

Setting up the development box

This walk-through uses Visual Studio 2015. Proje yoğun olarak kullanan Active Directory kimlik doğrulaması kitaplığı (ADAL). Lütfen okuyun ADAL hakkında bilgi edinmek için Active Directory kitaplığı .NET kimlik doğrulaması

Örnek de SQL LocalDB v11.0 kullanır. Örnek üzerinde çalışmayı düzeyleri SQL LocalDB yükleyin.

Setting up the environment

Biz temel bir kurulum ile çalışır:

  1. DC: hangi ADFS barındırılan etki alanı için etki alanı denetleyicisi
  2. Reklam FS Server: etki alanı için AD FS sunucusu
  3. Geliştirme makine: nerede sahibiz makine Visual Studio yüklü ve bizim örnek geliştirme hakkında

You can, if you want, use only two machines. DC/ADFS ve diğer örnek geliştirmek için bir.

How to setup the domain controller and AD FS is beyond the scope of this article. For additional deployment information see:

Örnek var olan OBO örnek Vittorio Bertocci tarafından oluşturulan Azure karşı göre ve kullanılabilir durumda burada. Proje geliştirme bilgisayarınızda Kopyala ve örnek ile çalışmaya başlamak için bir kopyasını oluşturmak için yönergeleri izleyin.

Clone or download this repository

From your shell or command line:

git clone https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof.git

Modifying the sample

WebAPI-OnBehalfOf-DotNet.sln çözümü açın sürede çözüm iki projeler olduğunu fark edeceksiniz-

  • ToDoListClient: Bu, kullanıcı ile etkileşim OpenID istemci görecek
  • ToDoListService: Bu orta katman Web sunucusu uygulaması olması /, hizmet doğrulanmış kullanıcı başka bir arka uç WebAPI OBO ile etkileşim

Gördüğünüz gibi orta katman ToDoListService tarafından erişilir kaynak olarak hareket edecek başka bir projesi daha sonra eklemeniz gerekecektir.

AD FS istemci ve Web sunucusu uygulaması için yapılandırma

Örnek geçerli biçiminde, kimlik doğrulama karşı Azure Reklam yapılması yapılandırılır. Doğrudan bu AD FS doğru şirket içi dağıtılan ve kimlik doğrulama mekanizması değiştirmek istiyoruz. Bunu yapmak için biz örnek AD FS istemci tanıması için ve Web sunucusu sahibiz uygulama yapılandırmak gerekir.

Uygulama grubu oluşturma

MMC ADFS Yönetimi'ni açın ve yeni bir uygulama grubu ekleyin. Yerel-uygulama-WebAPI şablonu seçin.

REKLAM FS OBO

Sonraki sayfada tıklayın ve istemci uygulama hakkında bilgi sağlamak için sayfa ile sunulacak. AD FS uygulamasında istemci için uygun bir ad verin. İstemci tanımlayıcı kopyalayın ve daha sonra bu uygulama yapılandırma visual Studio içinde gerekecektir gibi erişebilirsiniz başka bir yere kaydedin.

Not: Bu gerçekten olması durumunda yerel istemci kullanılmaz gibi yönlendirmeyi URI herhangi rasgele URI olabilir

REKLAM FS OBO

Sonraki sayfada tıklayın ve WebAPI hakkında bilgi sağlamak için sayfa ile sunulacak. AD FS giriş için uygun bir ad vermek için WebAPI ve URI yönlendir'da gördüğünüz URI olarak girin Visual Studio ToDoListService için

REKLAM FS OBO

REKLAM FS OBO

Sonraki sayfada tıklayın ve tercih erişim denetim ilke sayfasını görürsünüz. "Herkes ilke bölümünde izin" göründüğünden emin olun.

REKLAM FS OBO

Sonraki sayfada tıklayın ve ile yapılandırma uygulama izinleri sayfası sunulacak. Bu sayfada, izin verilen kapsamı (varsayılan olarak seçili) openid ve user_impersonation seçin. Kapsamı 'user_impersonation' AD FS üzerinde-adına-erişim belirteci isteği başarıyla yapabilmek gereklidir.

REKLAM FS OBO

Tıklayın sonraki Özeti sayfasını görüntüler. Sihirbazı kalan gidin ve yapılandırmayı bitirin.

Üzerinde-adına-, kimlik doğrulama etkinleştirmek için AD FS istemci için bir erişim simgesi kapsamı user_impersonation ile döndürür emin olmak ihtiyacımız. Aşağıdaki üç özel kurallar eklemek ToDoListServiceWebApi için talep verme değiştirin:

@RuleName = "All claims"
c:[]
=> issue(claim = c);

@RuleName = "Issue open id scope"
=> issue(Type = "http://schemas.microsoft.com/identity/claims/scope", Value = "openid");

@RuleName = "Issue user_impersonation scope"
=> issue(Type = "http://schemas.microsoft.com/identity/claims/scope", Value = "user_impersonation");

REKLAM FS OBO

İstemci uygulama grubu olarak ToDoListService ekleme

Bu aşamada biz AD FS'deki istemci ve yalnızca bir kaynak olarak gibi işlemler Web sunucusu uygulaması için ek bir giriş yapmanız gerekir. Yeni oluşturduğunuz uygulama grubunu açın ve ekleme uygulamayı tıklatın.

REKLAM FS OBO

İle "MySampleGroup için yeni bir uygulama Ekle" sayfası sunulacak. Bu sayfasında, "Server uygulama veya Web sitesi" tek başına uygulamayı seçin.

REKLAM FS OBO

İleri'yi tıklatın ve uygulama ayrıntıları sağlamak için sayfa ile birlikte sunulur. Ad bölümünde yapılandırma girişi için uygun bir ad verin. İstemci tanımlayıcısı ToDoListServiceWebAPI tanımlayıcısı aynı olduğundan emin olun

REKLAM FS OBO

Sonraki sayfada tıklayın ve uygulama kimlik bilgilerini yapılandırmak için sayfasını ile sunulacak. Üzerinde "paylaşılan gizlilik oluştur" seçeneğini tıklatın. Otomatik olarak oluşturulur bir gizlilik ile sunulacak. Biz visual studio ToDoListService yapılandırma ederken bu gerekli olacaktır gibi bazı konumda gizliliği kopyalayın.

REKLAM FS OBO

Sihirbazı tamamladıktan ve sonraki sayfada tıklayın.

ToDoListClient kodunu değiştirme

Uygulama yapılandırma değiştirme

Gidin, WebAPI-OnBehalfOf-DotNet çözümü ToDoListClient projede demektir. App.config dosyasını açın ve aşağıdaki değişiklikler yapın

  • Açıklama IDA: Kiracı anahtarı girişi
  • IDA: RedirectURI girmek için AD FS'de MySampleGroup_ClientApplication yapılandırması sırasında sağlanan rasgele URI.
  • IDA: İstemciKimliği anahtarı öğrenmek için istemci MySampleGroup_ClientApplication yapılandırması sırasında ADFS verdiğiniz kimliği tanımlayıcı sağlar.
  • IDA: ToDoListResourceID sağlamak için kaynak kimliği ToDoListServiceWebApi AD FS'de yapılandırması sırasında verdiğiniz
  • Açıklama anahtar IDA: AADInstance
  • IDA: ToDoListBaseAddress ToDoListServiceWebApi kaynak Kimliğini girin. Bu yapılacaklar listesi WebAPI arama sırasında kullanılacaktır.
  • Değer URI Reklam için sağlamak ve anahtar IDA: yetkisi ekleyin.

AppSettings App.Config'da buna benzer bakın:

<appSettings>
<!--<add key="ida:Tenant" value="[Enter tenant name, e.g. contoso.onmicrosoft.com]" />-->
<add key="ida:ClientId" value="c7f7b85c-497c-4589-877f-b17a0bd13398" />
<add key="ida:RedirectUri" value="https://arbitraryuri.com/" />
<add key="ida:TodoListResourceId" value="https://localhost:44321/" />
<!--<add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />-->
<add key="ida:TodoListBaseAddress" value="https://localhost:44321" />
<add key="ida:Authority" value="https://fs.anandmsft.com/adfs/"/>
</appSettings>

Kodu değiştirme

MainWindow.xaml.cs

Açıklama Kiracı bilgi uygulama yapılandırma okuma satır

//private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
//private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];

Dize yetkisi için değerini değiştirin

private static string authority = ConfigurationManager.AppSettings["ida:Authority"];

ToDoListResourceId ve ToDoListBaseAddress doğru değerlerini okumak için kod değiştirme

private static string todoListResourceId = ConfigurationManager.AppSettings["ida:TodoListResourceId"];
private static string todoListBaseAddress = ConfigurationManager.AppSettings["ida:TodoListBaseAddress"];

MainWindow() işlevi authcontext başlatma olarak değiştirin:

authContext = new AuthenticationContext(authority, false);

Arka uç kaynak ekleme

Üzerinde-adına-bir akış tamamlamak için üzerinde-adına-of ToDoListService erişim sağlayacak bir arka uç kaynak oluşturmanız mı gerekiyor doğrulanmış kullanıcı. Arka uç kaynak yerinin seçimi gereksinime göre değişebilir, ancak bu örnek amacıyla temel WebAPI oluşturabilirsiniz.

  • Çözüm 'WebAPI OnBehalfOf DotNet' Çözüm Gezgini üzerinde sağ tıklayın ve ardından Ekle yeni bir projede iş ->
  • ASP.NET Web uygulaması şablonu seçin

REKLAM FS OBO

  • Sonraki komut istemi 'değiştirme kimlik doğrulamasını tıklayın
  • 'İş ve Okul hesaplar' ve 'Şirket içi' üzerinde sağ açılan listeden seçin
  • AD FS dağıtım için federationmetadata.xml yolunu girin ve bir uygulama URI sağlar (şimdilik herhangi bir URL sağlamak ve daha sonra değişecektir) ve project çözüme eklemek için Tamam'ı tıklatın.

REKLAM FS OBO

  • Oluşturulan yeni proje altında çözümü Explorer'da, denetleyicileri üzerinde sağ tıklatın. Ardından Ekle -> denetleyicisi
  • Şablon, seçer ' Web API 2 denetleyicisi - boş ' Tamam'ı tıklatın.

REKLAM FS OBO

  • Uygun denetleyicisi ad verin

REKLAM FS OBO

  • Aşağıdaki kodu denetleyicisi ekleyin
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    namespace WebAPIOBO.Controllers
    {
        public class WebAPIOBOController : ApiController
        {
            public IHttpActionResult Get()
            {
                return Ok("WebAPI via OBO");
            }
        }
    }

Bu kodu herkes için WebAPI WebAPIOBO Get isteğine getirir olduğunda kısaca dizesi döndürür

Yeni arka uca WebAPI AD FS ekleme

MySampleGroup uygulama grubunu açın. Web API'i seçin ve Ekle uygulamayı tıklatın şablonu ve İleri tıklayın.

REKLAM FS OBO

API yapılandırmak Web sayfasında WebAPI giriş ve tanımlayıcısı için uygun bir ad sağlayın. Tanımlayıcı değer SSL URL WebAPIOBO projesi visual Studio (ne BackendWebAPIAdfsAdd için yaptığımız için benzer) olmalıdır.

REKLAM FS OBO

REKLAM FS OBO

Sihirbazı kalan aynı biz ToDoListService WebAPI ne zaman yapılandırılmış olarak devam edin. Sonunda, uygulama grubu gibi altında görünür:

REKLAM FS OBO

ToDoListService kodunu değiştirme

Uygulama yapılandırma değiştirme

  • Seçeneklerinin açın
  • Aşağıdaki anahtarlarını değiştirin
AnahtarıDeğer
IDA: hedef kitleAD FS ToDoListService WebAPI, örneğin, yapılandırması sırasında https://localhost:44321/ verilen gibi ToDoListService kimliği
IDA: İstemciKimliğiAD FS ToDoListService WebAPI, örneğin, yapılandırması sırasında https://localhost:44321/ verilen gibi ToDoListService kimliği
IDA: hedef kitle ve IDA: İstemciKimliği birbirinize eşleşen çok önemlidir
IDA: ClientSecretBu AD FS AD FS'de ToDoListService istemci yapılandırma olduğunda oluşturan gizliliği olur
IDA: ADFSMetadataBu URL adresi, AD FS için meta verileri, örneğin https://fs.anandmsft.com/federationmetadata/2007-06/federationmetadata.xml olur
IDA: OBOWebAPIBaseBu, örneğin https://localhost:44300 için arka uca API, arama için kullanacağız, temel adrestir
IDA: yetkisiAD FS hizmetiniz, örneğin https://fs.anandmsft.com/adfs/ için URL'yi budur

Tüm diğer IDA: XXXXXXX Tuşları'da appsettings düğüm yorum veya silinen

Azure için Reklam AD FS kimlik doğrulamasını değiştirme

  • Startup.Auth.cs dosyayı açın
  • Aşağıdaki kod kaldırma

      app.UseWindowsAzureActiveDirectoryBearerAuthentication(
          new WindowsAzureActiveDirectoryBearerAuthenticationOptions
          {
              Audience = ConfigurationManager.AppSettings["ida:Audience"],
              Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
              TokenValidationParameters = new TokenValidationParameters{ SaveSigninToken = true }
          });
    

ile

    app.UseActiveDirectoryFederationServicesBearerAuthentication(
        new ActiveDirectoryFederationServicesBearerAuthenticationOptions
        {
            MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"],
            TokenValidationParameters = new TokenValidationParameters()
            {
                SaveSigninToken = true,
                ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
            }
        });

ToDoListController değiştirme

System.Web başvuru ekleyin. Uzantıları. Aşağıdaki kod değiştirerek sınıf üyeleri Değiştir

//
// The Client ID is used by the application to uniquely identify itself to Azure AD.
// The App Key is a credential used by the application to authenticate to Azure AD.
// The Tenant is the name of the Azure AD tenant in which this application is registered.
// The AAD Instance is the instance of Azure, for example public Azure or Azure China.
// The Authority is the sign-in URL of the tenant.
//
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string appKey = ConfigurationManager.AppSettings["ida:AppKey"];

//
// To authenticate to the Graph API, the app needs to know the Grah API's App ID URI.
// To contact the Me endpoint on the Graph API we need the URL as well.
//
private static string graphResourceId = ConfigurationManager.AppSettings["ida:GraphResourceId"];
private static string graphUserUrl = ConfigurationManager.AppSettings["ida:GraphUserUrl"];
private const string TenantIdClaimType = "http://schemas.microsoft.com/identity/claims/tenantid";

ile

//
// The Client ID is used by the application to uniquely identify itself to Azure AD.
// The client secret is the credentials for the WebServer Client

private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
private static string authority = ConfigurationManager.AppSettings["ida:Authority"];

// Base address of the WebAPI
private static string OBOWebAPIBase = ConfigurationManager.AppSettings["ida:OBOWebAPIBase"];

Adı için kullanılan talep değiştirme

AD FS biz Nmae talep çalıştırmaya, ancak bunun NameIdentifier talep çalıştırmaya değil. Örnek NameIdentifier benzersiz olarak yapılacak öğeleri tuşuna için kullanır. Kolaylık için kod adı talep ile NameIdentifier güvenli bir şekilde kaldırabilirsiniz. Bulabilir ve tüm tekrarlarını NameIdentifier adıyla değiştirin.

Posta yordam ve CallGraphAPIOnBehalfOfUser() değiştirme

Kopyalama ve ToDoListController.cs içinde aşağıdaki kodu yapıştırın ve posta ve CallGraphAPIOnBehalfOfUser için kodu değiştirin

// POST api/todolist
public async Task Post(TodoItem todo)
{
    if (!ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope").Value.Contains("user_impersonation"))
    {
        throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.Unauthorized, ReasonPhrase = "The Scope claim does not contain 'user_impersonation' or scope claim not found" });
    }

    //
    // Call the WebAPIOBO On Behalf Of the user who called the To Do list web API.
    //
    string augmentedTitle = null;
    string custommessage = await CallGraphAPIOnBehalfOfUser();
    if (custommessage != null)
    {
        augmentedTitle = String.Format("{0}, Message: {1}", todo.Title, custommessage);
    }
    else
    {
        augmentedTitle = todo.Title;
    }

    if (null != todo && !string.IsNullOrWhiteSpace(todo.Title))
    {
        db.TodoItems.Add(new TodoItem { Title = augmentedTitle, Owner = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value });
        db.SaveChanges();
    }
}

public static async Task<string> CallGraphAPIOnBehalfOfUser()
{
    string accessToken = null;
    AuthenticationResult result = null;
    AuthenticationContext authContext = null;
    HttpClient httpClient = new HttpClient();
    string custommessage = "";

    //
    // Use ADAL to get a token On Behalf Of the current user.  To do this we will need:
    //      The Resource ID of the service we want to call.
    //      The current user's access token, from the current request's authorization header.
    //      The credentials of this application.
    //      The username (UPN or email) of the user calling the API
    //
    ClientCredential clientCred = new ClientCredential(clientId, clientSecret);
    var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext;
    string userName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value : ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;
    string userAccessToken = bootstrapContext.Token;
    UserAssertion userAssertion = new UserAssertion(bootstrapContext.Token, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);

    string userId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value;
    authContext = new AuthenticationContext(authority, false);

    // In the case of a transient error, retry once after 1 second, then abandon.
    // Retrying is optional.  It may be better, for your application, to return an error immediately to the user and have the user initiate the retry.
    bool retry = false;
    int retryCount = 0;

    do
    {
        retry = false;
        try
        {
            result = authContext.AcquireToken(OBOWebAPIBase, clientCred, userAssertion);
            accessToken = result.AccessToken;
        }
        catch (AdalException ex)
        {
            if (ex.ErrorCode == "temporarily_unavailable")
            {
                // Transient error, OK to retry.
                retry = true;
                retryCount++;
                Thread.Sleep(1000);
            }
        }
    } while ((retry == true) && (retryCount < 1));

    if (accessToken == null)
    {
        // An unexpected error occurred.
        return (null);
    }

    // Once the token has been returned by ADAL, add it to the http authorization header, before making the call to access the To Do list service.
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

    // Call the WebAPIOBO.
    HttpResponseMessage response = await httpClient.GetAsync(OBOWebAPIBase + "/api/WebAPIOBO");


    if (response.IsSuccessStatusCode)
    {
        // Read the response and databind to the GridView to display To Do items.
        string s = await response.Content.ReadAsStringAsync();
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        custommessage = serializer.Deserialize<string>(s);
        return custommessage;
    }
    else
    {
        custommessage = "Unsuccessful OBO operation : " + response.ReasonPhrase;
    }
    // An unexpected error occurred calling the Graph API.  Return a null profile.
    return (null);
}

Running the solution

Varsayılan olarak visual studio çalıştırmak için hata ayıklama basın, bir proje çalıştırmak için yapılandırılır.

  • Çözüm ve Özellikler'i seçin, sağ tıklayın.
  • Özellikler sayfasını birden çok başlangıç projeler seçin ve tüm üç girişlerini başlatmak için işlem değiştirin.

REKLAM FS OBO

F5 basın ve çözüm yürütme

REKLAM FS OBO

Oturum açma düğmesine tıklayın. Oturum ADFS kullanarak açmak için sorulur

REKLAM FS OBO

Sonra oturum açma, listeden bir yapılacak öğesi ekleyin. Arka planda biz Post işlemi için başka bir WebAPIOBO web API gönderisini yapacağınız ToDoListService yapacaksınız.

REKLAM FS OBO

Üzerinde başarılı işlemi öğeyi ek mesaj ile listeye arka uçtan Web OBO kimlik doğrulama akış kullanarak erişilebilir API eklenmiş olduğunu göreceksiniz.

REKLAM FS OBO

Ayrıntılı izlemelerini Fiddler üzerinde de görebilirsiniz. Fiddler başlatın ve httpS şifresinin etkinleştirin. Biz iki istekleri /adfs/oautincludes son noktayla olun görebilirsiniz. İlk etkileşimi biz belirteç son noktasına erişim kodu sunmak ve https://localhost:44321/ için bir erişim belirteci almak Reklam FS OBO

İkinci etkileşim içinde belirteç son nokta, biz olduğunu görebilirsiniz requested_token_use olarak ayarla on_behalf_of ve orta katman web hizmeti, yani https://localhost:44321/ üzerinde-adına-of belirteci elde etmek için onay olarak elde edilen erişim simgesi kullandığımıza. REKLAM FS OBO

© 2017 Microsoft