Azure AD ve OpenID kimlik doğrulaması kullanarak Bağlan
Surveys uygulaması, OpenID Bağlan (OIDC) protokolünü kullanarak kullanıcıların kimliğini Azure Active Directory (Azure AD) kullanır. Surveys uygulaması, ASP.NET Core OIDC için yerleşik ara yazılımı olan ASP.NET Core'i kullanır. Aşağıdaki diyagramda, kullanıcı yüksek bir düzeyde oturum aleninca ne olduğu gösterir.

- Kullanıcı, uygulamada "oturum aç" düğmesine tıklar. Bu eylem bir MVC denetleyicisi tarafından işleme.
- MVC denetleyicisi bir ChallengeResult eylemi döndürür.
- Ara yazılım ChallengeResult'a müdahale ediyor ve bir 302 yanıtı oluşturuyor. Bu yanıt, kullanıcının Azure AD oturum açma sayfasına yönlendirilmesine neden olur.
- Kullanıcı Azure AD ile kimlik doğrulamasına sahip olur.
- Azure AD, uygulamaya bir kimlik belirteci gönderir.
- Ara yazılım kimlik belirteci doğrular. Bu noktada kullanıcının kimliği uygulama içinde doğrulanır.
- Ara yazılım, kullanıcıyı uygulamaya yeniden yönlendirmektedir.
Uygulamayı Azure AD'ye kaydetme
OpenID'yi Bağlan için SaaS sağlayıcısı uygulamayı kendi Azure AD kiracısına kaydedmektedir.
Uygulamayı kaydetmek için Hızlı Başlangıç: Uygulamayı Microsoft kimlik platformu ile kaydetme.
Örnek Surveys uygulamasında bu işlevi etkinleştirmek için beni GitHub bakın. Şunlara dikkat edin:
Çok kullanıcılı bir uygulama için çok kullanıcılı seçeneği açıkça yapılandırmalısiniz. Bu, diğer kuruluşların uygulamaya erişmelerini sağlar.
Yanıt URL'si, Azure AD'nin OAuth 2.0 yanıtları gönderecek olduğu URL'dir. Bu ASP.NET Core kimlik doğrulama ara yazılımında yapılandırılan yol ile eşleşmesi gerekir (sonraki bölüme bakın).
Kimlik doğrulama ara yazılımlarını yapılandırma
Bu bölümde, OpenID kimlik doğrulaması ile çok kullanıcılı kimlik doğrulaması için ASP.NET Core kimlik doğrulama ara yazılımını yapılandırma Bağlan.
Başlangıç sınıfınıza OpenIDBağlan ekleyin:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(
options =>
{
Configuration.Bind("AzureAd", options);
options.Events = new SurveyAuthenticationEvents(loggerFactory);
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Events.OnTokenValidated += options.Events.TokenValidated;
})
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamWebApi(configOptions.SurveyApi.Name, Configuration.GetSection("SurveyApi"))
.AddDistributedTokenCaches();
Bazı ayarların secrets.json dosyasında sağlanmıştır. Dosyanın Aşağıdaki ayarlarla AzureAd adlı bir bölümü olması gerekir:
- örneği. Çok kullanıcılı bir uygulama için bunu olarak
https://login.microsoftonline.comayarlayın. Bu, herhangi bir Azure AD kiracısı kullanıcılarının oturum açmasına olanak sağlayan Azure AD ortak uç noktasının URL'dir. - ClientId. Uygulamayı Azure AD'ye kaydeden uygulamanın istemci kimliği.
- TenantId. Kuruluşta kullanıcıların oturum açmasını gösteren GUID.
Diğer ara yazılım seçenekleri şu anlama geliyor:
- SignInScheme. Bunu olarak
CookieAuthenticationDefaults.AuthenticationSchemeayarlayın. Bu ayar, kullanıcının kimliği doğrulandıktan sonra kullanıcı talepleri yerel olarak bir tanımlama bilgisinde depolandığı anlamına gelir. Bu tanımlama bilgisi, kullanıcının tarayıcı oturumu sırasında oturum açmasını sağlar. - Olay. Olay geri çağırmaları; bkz. Kimlik doğrulama olayları.
Kimlik doğrulama akışını başlatma
MVC'de kimlik doğrulama ASP.NET başlatmak için denetleyiciden bir ChallengeResult geri yazın:
[AllowAnonymous]
public IActionResult SignIn()
{
return new ChallengeResult(
OpenIdConnectDefaults.AuthenticationScheme,
new AuthenticationProperties
{
IsPersistent = true,
RedirectUri = Url.Action("SignInCallback", "Account")
});
}
Bu, ara yazılımı kimlik doğrulama uç noktasına yönlendiren bir 302 (Bulundu) yanıtının dönmesine neden olur.
Kullanıcı oturum açma oturumları
Daha önce belirtildiği gibi, kullanıcı ilk kez oturum aken, Tanımlama Bilgisi Kimlik Doğrulaması ara yazılımı kullanıcı taleplerini bir tanımlama bilgisinde yazar. Bundan sonra, tanımlama bilgisi okunarak HTTP isteklerinin kimliği doğrulanır.
Varsayılan olarak, tanımlama bilgisi ara yazılımı, kullanıcı tarayıcıyıkapatan bir oturum tanımlama bilgisi yazar. Kullanıcı siteyi bir sonraki ziyaretlerinde yeniden oturum açması gerekir. Ancak, IsPersistent'iChallengeResultiçinde true olarak ayarsanız ara yazılım kalıcı bir tanımlama bilgisi yazar, böylece tarayıcı kapatıldıktan sonra kullanıcı oturum açmış olarak kalır. Tanımlama bilgisinin sona erme tarihini yapılandırarak bkz. Tanımlama bilgisi seçeneklerini denetleme. Kalıcı tanımlama bilgileri kullanıcı için daha kullanışlıdır, ancak kullanıcının her zaman oturum açmasını istediğiniz bazı uygulamalar (örneğin, bir bankacılık uygulaması) için uygun olabilir.
OpenID Bağlan hakkında
OpenID Bağlan iletişim ASP.NET protokol ayrıntılarının çoğunu gizler. Bu bölümde, protokol akışını anlamak için yararlı olabilir uygulama hakkında bazı notlar yer almaktadır.
İlk olarak, kimlik doğrulama akışını uygulama ASP.NET (uygulama ile Azure AD arasındaki OIDC protokol akışının ayrıntılarını yoksayarak) incelenin. Aşağıdaki diyagramda işlem gösterildi.

Bu diyagramda iki MVC denetleyicisi vardır. Hesap denetleyicisi oturum açma isteklerini işler ve Giriş denetleyicisi giriş sayfasını gösterir.
Kimlik doğrulama işlemi şu şekildedir:
- Kullanıcı "Oturum açma" düğmesine tıklar ve tarayıcı bir GET isteği gönderir. Örneğin:
GET /Account/SignIn/. - Hesap denetleyicisi bir
ChallengeResultdöndürür. - OIDC ara yazılımı, Azure AD'ye yeniden yönlendirerek bir HTTP 302 yanıtı döndürür.
- Tarayıcı kimlik doğrulama isteğini Azure AD'ye gönderir
- Kullanıcı Azure AD'de oturum alar ve Azure AD bir kimlik doğrulama yanıtı gönderir.
- OIDC ara yazılımı bir talep sorumlusu oluşturur ve bunu Tanımlama Bilgisi Kimlik Doğrulaması ara yazılımına iletir.
- Tanımlama bilgisi ara yazılımı talep sorumlusünün seri hale getirmesi ve bir tanımlama bilgisi ayarlar.
- OIDC ara yazılımı, uygulamanın geri çağırma URL'sini yeniden yönlendirmektedir.
- Tarayıcı yeniden yönlendirmeyi izler ve istekte tanımlama bilgisini gönderir.
- Tanımlama bilgisi ara yazılımı tanımlama bilgisini bir talep sorumlusuna ve talep sorumlusuna
HttpContext.Usereşit olarak ayarlar. İstek bir MVC denetleyicisine yönlendirildi.
Kimlik doğrulama bileti
Kimlik doğrulaması başarılı olursa, OIDC ara yazılımı kullanıcının taleplerini tutan bir talep sorumlusu içeren bir kimlik doğrulama bileti oluşturur.
Not
Kimlik doğrulama akışının tamamı tamamlanana kadar, HttpContext.User kimliği doğrulanmış kullanıcı değil anonim bir sorumlu tutar. HttpContext.User Anonim sorumlu boş bir talep koleksiyonuna sahiptir. Kimlik doğrulaması tamamlandıktan ve uygulama yeniden yönlendirdikten sonra, tanımlama bilgisi ara yazılımı kimlik doğrulama tanımlama bilgisininrialize eder ve kimliği doğrulanmış kullanıcıyı temsil eden bir talep HttpContext.User sorumlusuna ayarlar.
Kimlik doğrulama olayları
Kimlik doğrulama işlemi sırasında OpenID Bağlan aracı bir dizi olay ortaya açar:
- RedirectToIdentityProvider. Ara yazılım kimlik doğrulama uç noktasına yönlendirmeden hemen önce çağrılır. Yeniden yönlendirme URL'sini değiştirmek için bu olayı kullanabilirsiniz; örneğin, istek parametreleri eklemek için. Örnek için bkz. Yönetici onayı istemi ekleme.
- AuthorizationCodeReceived. Yetkilendirme koduyla çağrılır.
- TokenResponseReceived. Ara yazılım IDP'den erişim belirteci alır ancak doğrulanmazsa çağrılır. Yalnızca yetkilendirme kod akışı için geçerlidir.
- TokenValidated. Ara yazılım kimlik belirteci doğrulandıktan sonra çağrılır. Bu noktada uygulama, kullanıcı hakkında doğrulanmış bir talep kümesine sahip olur. Talepler üzerinde ek doğrulama gerçekleştirmek veya talepleri dönüştürmek için bu olayı kullanabilirsiniz. Bkz. Taleplerle çalışma.
- UserInformationReceived. Ara yazılım kullanıcı profilini Kullanıcı bilgileri uç noktasından alırsa çağırılır. Yalnızca yetkilendirme kodu akışına ve yalnızca
GetClaimsFromUserInfoEndpoint = trueAra yazılım seçeneklerinde geçerlidir. - Bilet alındı. Kimlik doğrulaması tamamlandığında çağırılır. Bu, kimlik doğrulamanın başarılı olduğunu varsayarak son olaydır. Bu olay işlendikten sonra, Kullanıcı uygulamada oturum açmış olur.
- AuthenticationFailed. Kimlik doğrulaması başarısız olursa çağırılır. Kimlik doğrulama başarısızlıklarını (örneğin, bir hata sayfasına yönlendirerek) işlemek için bu olayı kullanın.
Bu olaylara yönelik geri çağrılar sağlamak için, ara yazılım üzerindeki Olaylar seçeneğini ayarlayın. Olay işleyicilerini iki farklı şekilde bildirmeniz gerekir: Lambdalar ile satır Içi veya OpenIdConnectEventsöğesinden türetilen bir sınıf. Olay geri aramalarınızın önemli bir mantığı varsa ve başlangıç sınıfınızı yığılmaması için ikinci yaklaşım önerilir. Başvuru uygulamamız bu yaklaşımı kullanır.
openıd Bağlan uç noktaları
Azure AD, kimlik sağlayıcısı (ıdp) iyi bilinen bir uç noktadanJSON meta veri belgesi döndüren openıd Bağlan bulmayıdestekler. Meta veri belgesi şöyle bilgiler içerir:
- Yetkilendirme uç noktasının URL 'SI. Bu, uygulamanın kullanıcının kimliğini doğrulamak için yeniden yönlendirdiği yerdir.
- Uygulamanın kullanıcının oturumunu kapatmak için gittiği "bitiş oturumu" uç noktasının URL 'SI.
- İstemcinin ıDP 'den aldığı OıDC belirteçlerini doğrulamak için kullandığı imzalama anahtarlarını almaya yönelik URL.
Varsayılan olarak, OıDC ara yazılımı bu meta verileri nasıl getirip haberdar olarak bilir. Ara yazılım ' de yetkili seçeneğini ayarlayın ve ara yazılım meta verilerin URL 'sini oluşturur. ( Metadataaddress seçeneğini ayarlayarak meta veri URL 'sini geçersiz kılabilirsiniz.)
openıd Bağlan akışları
Varsayılan olarak, OıDC ara yazılımı, yanıt verme moduyla birlikte karma akış kullanır.
- Hibrit akışı , istemcinin yetkilendirme sunucusuna aynı gidiş dönüş IÇIN bir kimlik belirteci ve yetkilendirme kodu alabileceği anlamına gelir.
- Form yanıt verme modu , YETKILENDIRME sunucusunun kimlik belirtecini ve yetkilendirme kodunu uygulamaya göndermek IÇIN http post isteği kullandığı anlamına gelir. Değerler form-urlencoded (içerik türü = "application/x-www-form-urlencoded") biçimindedir.
OıDC ara yazılımı yetkilendirme uç noktasına yeniden yönlendirirse, yeniden yönlendirme URL 'SI OıDC için gereken tüm sorgu dizesi parametrelerini içerir. Karma akış için:
- client_id. Bu değer, ClientID seçeneğinde ayarlanır.
- scope = "OpenID profile", bu, bir OıDC isteği olduğu ve kullanıcının profilini isteytiğimiz anlamına gelir.
- response_type = "Code id_token". Bu, karma akışı belirtir.
- response_mode = "form_post". Bu, post yanıtı formunu belirler.
Farklı bir akış belirtmek için, seçeneklerde responseType özelliğini ayarlayın.
app.AddAuthentication().AddOpenIdConnect(options =>
{
options.ResponseType = "code"; // Authorization code flow
// Other options
}
Örnek kod