1

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

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

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

当我在我们的站点中实现此功能时,Startup.Auth.cs ConfigureAuth 在 APP 启动期间仅执行一次,并且根据上述参考。

使用 [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] 属性的作用感到好奇?

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

4

2 回答 2

1

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

于 2015-08-28T07:25:28.833 回答
0

如果您有明确的 SignIn() 操作,请勿将 [Authorize] 属性与控制器一起使用。

您可能会弄乱身份验证 cookie 和 Session 变量。检查此链接

详情。

于 2016-03-08T17:40:44.647 回答