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