您好,登錄后才能下訂單哦!
本篇文章為大家展示了Windows Azure SDK .NET開發中Azure AD如何管理用戶信息,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
之所以將Azure AD 作為開始,是應為基本上我們所有應用都需要進行安全管理。Azure Active Directory (Azure AD) 通過以下方式簡化了對開發人員的身份驗證:將標識提供為一項服務、支持行業標準協議(例如 OAuth 2.0 和 OpenID Connect),并提供用于不同平臺的開源庫來幫助你快速開始編碼。
Azure Active Directory (Azure AD) 提供了一種簡便的方法,讓企業可以在云中和本地管理標識和訪問。你的用戶可以使用相同的工作或學校帳戶,以單一登錄到任何云和本地 Web 應用程序。你的用戶可以使用其最喜歡的設備,包括 iOS、Mac OS X、Android 和 Windows。你的組織可以使用集成的多因素身份驗證,在本地和云中保護敏感數據和應用程序,從而確保本地和遠程訪問的安全。
而且Azure Active Directory (AD) 在大多數 Microsoft 云服務后面提供核心目錄和身份管理功能。這些服務包括但不限于:
Azure
Microsoft Office 365
Microsoft Dynamics CRM Online
Windows Intune
當你注冊 Microsoft 云服務時,便會獲得一個 Azure AD 目錄。你可根據需要創建更多的目錄。例如,可以將第一個目錄保留為生產目錄,然后創建另一個目錄進行測試或過渡。
在啟用云的工作區中,可以將租戶定義為擁有并管理該云服務的特定實例的客戶端或組織。租戶使用 Microsoft Azure 提供的標識平臺,它只是你的組織在注冊 Azure 或 Office 365 等 Microsoft 云服務時接收并擁有的 Azure Active Directory (Azure AD) 專用實例。每個 Azure AD 目錄都是獨特的,獨立于其他 Azure AD 目錄。就像公司辦公大樓是你的組織特有的安全資產一樣,根據設計,Azure AD 目錄也是僅供你的組織使用的安全資產。Azure AD 體系結構隔離了客戶數據和身份信息,避免混合存放。這意味著,一個 Azure AD 目錄的用戶和管理員不可能意外或惡意性地訪問另一目錄中的數據。
我現在有兩個Azure AD目錄,當然也就是有兩個Azure AD租戶。
現在,當你注冊 Azure 時,將自動創建一個目錄,你的訂閱將與該目錄相關聯。使用 Azure AD 不收取費用。目錄是免費資源。還有一個收費的Azure Active Directory 高級版級別,它提供額外的功能,例如公司品牌和自助密碼重置。有意思的是Azure AD目錄建立完畢后是可以改名字的,所以你在初次起名字時就不必猶猶豫豫了。
在我們的案例中,我們是用戶通過Web應用程序進行身份識別。
Azure AD 是標識提供程序,負責對組織的目錄中存在的用戶和應用程序的標識進行驗證,并最終在那些用戶和應用程序成功通過身份驗證時頒發安全令牌。
希望將身份驗證外包給 Azure AD 的應用程序必須在 Azure AD 中進行注冊,Azure AD 將在目錄中注冊并唯一地標識該應用程序。
在用戶通過身份驗證后,應用程序必須對用戶的安全令牌進行驗證以確保身份驗證對于目標方是成功的。
身份驗證過程的請求和響應流是由所使用的身份驗證協議(例如 OAuth 2.0、OpenID Connect、WS-Federation 或 SAML 2.0)決定的
這章我們將簡單的對Azure AD的開發進行入門性的嘗試,包括身份驗證登錄、基本身份信息的存儲。要完成Azure AD的應用開發需要在Azure門戶和開發環境中各自完成一些工作。
Azure AD開發部分
首先我們需要引入以下組件庫
Microsoft.IdentityModel.Clients.ActiveDirectory
Microsoft.IdentityModel.Protocol.Extensions
Microsoft.Owin
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Security
Microsoft.Owin.Security.Cookies
Microsoft.Owin.Security.OpenIdConnect
Microsoft.Web.Infrastructure
Microsoft.WindowsAzure.ConfigurationManager.
System.IdentityModel.Tokens.Jwt
其次我們需要在Web.config文件的appSettings節添加如下配置節點
<add key="ida:ClientId" value=" " />
<add key="ida:Tenant" value=" " />
<add key="ida:TenantId" value="" />
<add key="ida:AADInstance" value="https://login.chinacloudapi.cn/{0}" />
<add key="ida:PostLogoutRedirectUri" value=" " />
<add key="ida:GraphUrl" value="https://graph.chinacloudapi.cn" />
<add key="ida:AppKey" value="" />
注意,由于我們使用的是世紀互聯的版本,所以ida:AADInstance、ida:GraphUrl的Url將固定為https://login.chinacloudapi.cn/{0}和https://graph.chinacloudapi.cn。關于其他的配置值將在Azure AD門戶部分講解。
然后我們需要編寫AuthenticationHelper類來輔助我們處理有關授權的基本處理,AuthenticationHelper有兩大部分,第一部分是通過靜態字段來讀取在Web.config文件的appSettings節配置的有關Azure AD的信息。
public static readonly string Tenant = CloudConfigurationManager.GetSetting("ida:Tenant");
public static readonly string TenantId = CloudConfigurationManager.GetSetting("ida:TenantId");
public static readonly string LoginUrl = CloudConfigurationManager.GetSetting("ida:AADInstance");
public static readonly string GraphUrl = CloudConfigurationManager.GetSetting("ida:GraphUrl");
public static readonly string AppKey = CloudConfigurationManager.GetSetting("ida:AppKey");
public static readonly string AuthorityUrl = String.Format(CultureInfo.InvariantCulture, LoginUrl, TenantId);
public static readonly string AuthString = CloudConfigurationManager.GetSetting("ida:Auth") + CloudConfigurationManager.GetSetting("ida:Tenant");
public static readonly string ClaimsSchemas = "http://schemas.microsoft.com/identity/claims/objectidentifier";
public static readonly string ClientId = CloudConfigurationManager.GetSetting("ida:ClientId");
public static readonly string ClientSecret = CloudConfigurationManager.GetSetting("ida:ClientSecret");
public static readonly string PostLogoutRedirectUri = CloudConfigurationManager.GetSetting("ida:PostLogoutRedirectUri");
你已經注意到了,上面的代碼在讀取配置的時候沒有使用我們傳統的WebConfigurationManager類,而是采用了Azure新加入的CloudConfigurationManager類,該類是用于訪問 Microsoft Azure 配置設置的靜態類,可以從運行應用程序的平臺的相應配置存儲中讀取配置設置。Microsoft Azure 外部環境中運行的 .NET 應用程序通常在 web.config 或 app.config 文件中存儲配置設置。不管在哪個環境中運行代碼,都可以使用CloudConfigurationManager類從適當的配置文件中讀取設置。
然后在AuthenticationHelper中添加一個方法AcquireTokenAsync,這個方法用于返回當前的用戶憑證,如果沒有憑證則拋出異常。
public static string Token;
public static async Task<string> AcquireTokenAsync()
{
if (Token == null || Token.IsEmpty())
{
throw new Exception("Authorization Required.");
}
return Token;
}
然后我們再添加GetActiveDirectoryClient方法來獲取對Azure AD的客戶端對象引用。
public static ActiveDirectoryClient GetActiveDirectoryClient()
{
Uri baseServiceUri = new Uri(GraphUrl);
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(new Uri(baseServiceUri, TenantId), async () => await AcquireTokenAsync());
return activeDirectoryClient;
}
AuthenticationHelper到此就完成了,我們建立一個控制器AzureActiveDirectoryController,這個控制器將包含以下方法來使用AuthenticationHelper類。
SignIn
SignOut
SignIn登錄
代碼非常簡單,在當前上下文的采用OpenID進行身份詢問獲取
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext()
.Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
SignOut登出
同樣代碼簡單明確vm
public void SignOut()
{
string userObjectID = ClaimsPrincipal.Current.FindFirst(AuthenticationHelper.ClaimsSchemas).Value;
var authContext = new AuthenticationContext(AuthenticationHelper.AuthorityUrl, new NaiveSessionCache(userObjectID));
authContext.TokenCache.Clear();
AuthenticationHelper.Token = null;
HttpContext.GetOwinContext().Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
}
好了,現在登入登出的代碼已經完成了,我們可以嘗試下載我們的MVC Web APP中執行體驗下。在MVC自己建立的架構中我們可以循著View\ Shared\ _LoginPartial.cshtml找到通用的登入登出的View界面,然后修改代碼為
@if (Request.IsAuthenticated)
{
< text>
< ul class="nav navbar-nav navbar-right">
< li class="navbar-text">
Hello, @User.Identity.Name!
</li>
< li>
@Html.ActionLink("Sign out", "SignOut", "AzureActiveDirectory")
< /li>
< /ul>
< /text>
}
else
{
<ul class="nav navbar-nav navbar-right">
< li>@Html.ActionLink("Sign in", "SignIn", "AzureActiveDirectory", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
< /ul>
}
上面的代碼通過一個if完成登陸后出現Sign out鏈接和登出狀態為Sign in鏈接。然后在View\ Shared\ _LoginPartial.cshtml加入這個_LoginPartial.cshtml我們就在主模板擁有了登錄登出的鏈接功能。我對_LoginPartial.cshtml此處的修改如下
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("主頁", "Index", "Home")</li>
<li>@Html.ActionLink("關于", "About", "Home")</li>
<li>@Html.ActionLink("聯系方式", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
現在我們執行代碼后,我們看到的默認頁面是
點擊Sign in鏈接后將跳轉到微軟的登錄界面
點擊賬號后
輸入正確的密碼后,將跳回我們應用的默認首頁,并且明顯的發現我們已經使用了正確的身份登入了。
上述內容就是Windows Azure SDK .NET開發中Azure AD如何管理用戶信息,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。