使用OpenId Connect实现Azure AD的身份验证



我正在尝试使用Azure AD在我们的网站实现身份验证,以下参考。我们的网站使用下面的堆栈ASP。. NET、MVC5托管在IIS上。基本使用OpenId Connect协议进行网站认证,使用oAuth2.0协议进行委托访问,使用token进行授权。

https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet

从Azure AD逻辑中获取令牌是在Startup.Auth.cs类中,它是从OwinStartup类调用的。

当我在我们的网站中实现这一点时,Startup.Auth.cs ConfigureAuth仅在APP启动期间执行一次,并按照上述参考。

用[Authorize]修饰控制器类或添加SignIn(),检查请求是否经过身份验证,并再次调用身份验证代码。

public void SignIn() 
     { 
         // Send an OpenID Connect sign-in request. 
         if (!Request.IsAuthenticated) 
         { 
             HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType); 
         } 
     } 

问题是SignIn()方法没有进入我们的应用程序,也很好奇[authorization]属性是什么?

我非常欣赏任何关于这些的见解。

ACS不支持OpenId Connect并且不再被开发-因此答案的第一部分将是-您正在尝试做的事情不支持。也就是说,你确定你指的是ACS吗?该示例指的是Azure AD,这是一个不同的产品。对于答案的其余部分,我将假设您确实指的是Azure AD。从你的描述中,我不明白你遇到的问题是什么。ConfigureAuth只需要执行一次就可以完成它的工作,它将负责处理身份验证的模块(中间件)添加到请求处理管道中。我不确定你指的是什么代码"认证"。这里不应该有这样的调用——当你请求一个带有[authorization]、ASP的路由时。. NET将强制调用者经过身份验证;如果不是,就像第一个请求的情况一样,这将导致打开的连接中间件生成一个登录请求。Signin()方法的功能与此基本相同,但不需要尝试访问标有[authorization]的资源。

如果你有明确的SignIn()操作,不要在控制器中使用[authorization]属性。

您可能会混淆身份验证cookie和会话变量。查看此链接

详情。

最新更新