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

时间:2015-08-28 06:26:02

标签: owin openid-connect azure-acs

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

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

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

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

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

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

问题是SignIn()方法没有进入我们的应用程序并且对[Authorize]属性的作用感到好奇吗?

我非常感谢对这些的任何见解。非常感谢。

2 个答案:

答案 0 :(得分:1)

ACS不支持OpenId Connect并且不再开发 - 因此答案的第一部分是 - 不支持您尝试做的事情。 那就是说,你确定你指的是ACS吗?该示例涉及Azure AD,它是一种不同的产品。 对于答案的其余部分,我将假设您确实参考了Azure AD。 根据您的描述,我不明白您遇到的问题是什么。 ConfigureAuth只需执行一次即可完成其工作,即向请求处理管道添加负责处理身份验证的模块(中间件)。我不确定你用#34; Authenticate"指的是什么代码。此处不应该有这样的调用 - 当您请求使用[authorize]修饰的路由时,ASP.NET将强制对调用者进行身份验证;如果不是,就像第一个请求的情况一样,这会导致打开的连接中间件生成登录请求。 Signin()方法几乎完全相同,但无需尝试访问标有[authorize]的资源。

答案 1 :(得分:0)

如果您有明确的SignIn()操作,请不要对控制器使用[Authorize]属性。

您可能会搞乱身份验证Cookie和Session变量。 查看this link

了解详情。