首页 > 编程 > .NET > 正文

ASP.NET 5中使用AzureAD实现单点登录

2024-07-10 13:29:12
字体:
来源:转载
供稿:网友

本文给大家介绍的是在ASP.NET 5中使用AzureAD实现单点登录的方法和示例,有需要的小伙伴可以参考下。

题记:在ASP.NET 5中虽然继续可以沿用ASP.NET Identity来做验证授权,不过也可以很容易集成支持标准协议的第三方服务,比如Azure Active Directory。

其实,在ASP.NET 5中集成AzureAD,利用其进行验证和授权,是非常简单的。因为:首先Azure Active Directory提供了OAuth2.0、OpenId Connect 1.0、SAML和WS-Federation 1.2标准协议接口;其次微软在ASP.NET 5中移植了集成OpenId Connect的OWIN中间件。所以,只要在ASP.NET 5项目中引用"Microsoft.AspNet.Authentication.OpenIdConnect"这个包,并正确配置AzureAD的连接信息,就可以很容易的进行集成。

大致步骤如下:

1,在config.json文件中添加AzureAD的配置信息:

 

 
  1. "AzureAd": { 
  2. "ClientId""[Enter the clientId of your application as obtained from portal, e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]"
  3. "Tenant""[Enter the name of your tenant, e.g. contoso.onmicrosoft.com]"
  4. "AadInstance""https://login.microsoftonline.com/{0}", // This is the public instance of Azure AD 
  5. "PostLogoutRedirectUri": https://localhost:44322/ 

2,修改project.json,引入OpenIdConnect的中间件:

 

 
  1. "Microsoft.AspNet.Authentication.OpenIdConnect""1.0.0-*" 

3,在Startup中的ConfigureServices方法里面添加:

 

 
  1. // OpenID Connect Authentication Requires Cookie Auth 
  2. services.Configure<ExternalAuthenticationOptions>(options => 
  3. options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
  4. }); 

4,在Startup中的Configure方法里面添加:

 

 
  1. // Configure the OWIN Pipeline to use Cookie Authentication 
  2. app.UseCookieAuthentication(options =>  
  3. // By default, all middleware are passive/not automatic. Making cookie middleware automatic so that it acts on all the messages. 
  4. options.AutomaticAuthentication = true
  5.  
  6. }); 
  7.  
  8. // Configure the OWIN Pipeline to use OpenId Connect Authentication 
  9. app.UseOpenIdConnectAuthentication(options => 
  10. options.ClientId = Configuration.Get("AzureAd:ClientId"); 
  11. options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant")); 
  12. options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri"); 
  13. options.Notifications = new OpenIdConnectAuthenticationNotifications 
  14. AuthenticationFailed = OnAuthenticationFailed, 
  15. }; 
  16. }); 

5,Startup的OnAuthenticationFailed方法为:

 

 
  1. private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification) 
  2. notification.HandleResponse(); 
  3. notification.Response.Redirect("/Home/Error?message=" + notification.Exception.Message); 
  4. return Task.FromResult(0); 

6,添加一个名为AccountController的Controller:

 

 
  1. public class AccountController : Controller 
  2. // GET: /Account/Login 
  3. [HttpGet] 
  4. public IActionResult Login() 
  5. if (Context.User == null || !Context.User.Identity.IsAuthenticated) 
  6. return new ChallengeResult(OpenIdConnectAuthenticationDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" }); 
  7. return RedirectToAction("Index""Home"); 
  8.  
  9. // GET: /Account/LogOff 
  10. [HttpGet] 
  11. public IActionResult LogOff() 
  12. if (Context.User.Identity.IsAuthenticated) 
  13. Context.Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationScheme); 
  14. Context.Authentication.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationScheme); 
  15. return RedirectToAction("Index""Home"); 

以上代码也可以到我Fork的完整示例项目中找到:https://github.com/heavenwing/WebApp-OpenIdConnect-AspNet5

【更新:2015-07-16】

如果你遇到添加了 [Authorize] ,但是不能自动转到登录页面的情况,那么需要:

 

 
  1. app.UseOpenIdConnectAuthentication(options => { 
  2. options.AutomaticAuthentication = true
  3. }); 

具体见:https://github.com/aspnet/Security/issues/357#issuecomment-120834369

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表