2017-01-22

Azure Active Directory - Part 11 ( Azure AD 與 ASP.NET MVC 整合)

之前文章已經介紹 Azure AD 基本觀念及操作,接著就是重頭戲 - 將 Azure AD 與應用程式進行整合,就來了解一下其中的眉眉角角吧


文章大綱

  1. 建立 ASP.NET MVC 應用程式
  2. 在 Azure AD 上註冊應用程式
  3. 設定 ASP.NET MVC 應用程式

建立 ASP.NET MVC 應用程式

  1. 建立 ASP.NET MVC 專案
    • web 專案 template
    • .net framework
    • ASP.NET Web Application
    • project Name

      1mvc

    • empty --> MVC

      2create

  2. 加入 owin
    • Microsoft.Owin.Security.OpenIdConnect
    • Microsoft.Owin.Security.Cookies
    • Microsoft.Owin.Host.SystemWeb

      3pkgconsole

      • 可使用 NuGet GUI (以下使用 Package Manager Console)
      Install-Package Microsoft.Owin.Security.OpenIdConnect
      Install-Package Microsoft.Owin.Security.Cookies
      Install-Package Microsoft.Owin.Host.SystemWeb
      
  3. 加入 Startup.cs
    • 在專案根目錄加入 Startup.cs 檔案
    • 加入方式有兩個,擇一即可
      • 1.專案按右鍵 --> Add --> New Item..

        4newitem

        • 搜尋 OWIN --> OWIN Startup class --> Name

          5newsrartup

      • 2.專案按右鍵 --> Add --> OWIN Startup class

        6OWINCLASS

        • 指定檔案名稱

          7nameing

    • 修改 Startup.cs
      • 將 class 加上 partial
        • public class Startup --> public partial class Startup
      • Configuration 中 call ConfigureAuth 並傳入 IAppBuilder
        • ConfigureAuth(app);
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
            }
        }
        
  4. 加入 Startup.Auth.cs
    • App_Start 目錄加入 Startup.Auth.cs 檔案(加入方式同上)
      • namespace 需與根目錄 Startup.cs 相同
    • 修改 Startup.Auth.cs
      • 將 class 加上 partial
        • public class Startup --> public partial class Startup
      • 加入 clientId,aadInstance,tenant,postLogoutRedirectUri,authority
        private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
        private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
        private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
        private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
        
        string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
        
      • 加入 ConfigureAuth 方法
        public void ConfigureAuth(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
        
            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                });
        }
        
      • 需要 using Microsoft.Owin.Security.Cookies, Microsoft.Owin.Security.OpenIdConnect,System.Globalization,System.Configuration
  5. 加入 HomeControllerindex.cshtml
    • HomeController
      • Controllers 資料夾右鍵 --> Add --> Controller...

        8addcontroller

        • MVC 5 Controller -Empty

          9controllertype

        • Namig Controller

          10namingcontroller

    • index.cshtml
      • 在 action 區塊中按右鍵 --> Add View...

        11addview

      • 設定 view 屬性
        • 專案中目前無 layout page ,所以先不使用

        12viewproperty

在 Azure AD 上註冊應用程式

  1. 登入 Azure 入口網站
  2. Azure Active Directory

    1aad

  3. 應用程式註冊 --> 加入

    13register

  4. 填寫應用程式資訊

    14APPINFO

    • 名稱
      • 至少需有四個字元

        15NAME

    • 應用程式類型

      16type

      • WEB
      • 可安裝的應用程式
    • 登入 URL

      17url

      • 1.專案按 F4 開啟 Project Properties --> Url

        18properties

      • 2.專案右鍵 --> Properties --> Web --> Project Url

        19project

        20url

設定 ASP.NET MVC 應用程式

  1. Web.config 加入設定值
    <add key="ida:ClientId" value="" />
    <add key="ida:Tenant" value="" />
    <add key="ida:AADInstance" value="https://login.microsoftonline.com/{0}" />
    <add key="ida:PostLogoutRedirectUri" value="https://localhost:45247/" />
    
    • ida:ClientId
      • e.g. 82692da5-a86f-44c9-9d53-2f88d52b478b

        21clientID

    • ida:Tenant
      • e.g. contoso.onmicrosoft.com

        22tenant

    • ida:AADInstance
      • https://login.microsoftonline.com/{0}
    • ida:PostLogoutRedirectUri
      • 專案 url, 登出後轉導 url
  2. 加入驗證
    • 直接在需要驗證 Controller 或是 Action 上加上 [Authorize]
    • 手動加入驗證
      • 登入
        if (!Request.IsAuthenticated)
        {
            HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
        
      • 登出
         HttpContext.GetOwinContext().Authentication.SignOut(        OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
        
  3. 成功使用 AAD 驗證 >23result
  4. 取得使用者資料
    var Name = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value;
    var ObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
    var GivenName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.GivenName).Value;
    var Surname = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Surname).Value;
    var UPN = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value;
    

參考資料

  1. 使用 Azure AD 進行 ASP.NET Web 應用程式登入與登出

沒有留言:

張貼留言