C# OpenID Connect不适用于ASP.NET MVC 5

C# OpenID Connect不适用于ASP.NET MVC 5,c#,openid-connect,C#,Openid Connect,我正在运行一个利用Microsoft OpenID Connect的ASP.NET MVC应用程序 (手册:) 我们于2019年10月开始服务,到目前为止没有任何问题。在上次成功登录后,我们在重定向部分面临授权失败,无法验证声明(User.Identity)信息,因此导致无限循环问题 我希望在这个问题上能得到帮助 成功登录后,我存储身份验证信息,以便在单独配置的RESTful API中共享令牌值 在早期版本中,令牌值存储在token表中,并存储在会话中 但是当我从第二次尝试开始使用会话时,问题开

我正在运行一个利用Microsoft OpenID Connect的ASP.NET MVC应用程序

(手册:)

我们于2019年10月开始服务,到目前为止没有任何问题。在上次成功登录后,我们在重定向部分面临授权失败,无法验证声明(
User.Identity
)信息,因此导致无限循环问题

我希望在这个问题上能得到帮助

成功登录后,我存储身份验证信息,以便在单独配置的RESTful API中共享令牌值

在早期版本中,令牌值存储在
token
表中,并存储在会话中

但是当我从第二次尝试开始使用会话时,问题开始出现,所以我开始不使用会话

在这一点上,我尝试了几次登录尝试,并看到它运行良好,没有问题

最初,应用程序正常工作,但随着时间的推移,我无法再检索身份验证信息,并且再次出现无限循环

代码:

公共无效登录()
{
如果(!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
新的AuthenticationProperties{RedirectUri=“/Auth/SignedIn”},
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
公共无效签出()
{
这个.RemoveSessionToken();
HttpContext.GetOwinContext().Authentication.SignOut(
OpenIdConnectAuthenticationDefaults.AuthenticationType,
CookieAuthenticationDefaults.AuthenticationType);
}
公共异步任务SignedIn()
{
var IsLoggedIn=Request.IsAuthenticated;
var claims=(System.Security.claims.ClaimsIdentity)ClaimsPrincipal.Current.Identity;
如果(IsLoggedIn)
{
var userClaims=User.Identity as System.Security.Claims.ClaimsIdentity;
//字符串sessionToken=Session.SessionID;
字符串ipAddress=Request.ServerVariables[“HTTP_X_FORWARDED_FOR”];
if(String.IsNullOrEmpty(ipAddress))
ipAddress=Request.ServerVariables[“REMOTE_ADDR”];
var dbContext=new getOfficeedUserSenties();
var token=new T_APIToken();
string office365Id=userClaims?.FindFirst(“首选用户名”)?值;
token.TokenID=office365Id;
token.IssuerID=office365Id;
token.IssueDT=DateTime.Now;
token.ExpireDT=DateTime.Now.AddMinutes(180);
dbContext.T_APIToken.Add(token);
dbContext.SaveChanges();
返回重定向到操作(“索引”、“主页”);
}
其他的
{
//错误
返回重定向到操作(“签名”);
}
}
public void SignIn()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
            new AuthenticationProperties{ RedirectUri = "/Auth/SignedIn" },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }
}

public void SignOut()
{
    this.RemoveSessionToken();

    HttpContext.GetOwinContext().Authentication.SignOut(
        OpenIdConnectAuthenticationDefaults.AuthenticationType,
        CookieAuthenticationDefaults.AuthenticationType);
}

public async Task<ActionResult> SignedIn()
{
    var IsLoggedIn = Request.IsAuthenticated;
    var claims = (System.Security.Claims.ClaimsIdentity) ClaimsPrincipal.Current.Identity;

    if (IsLoggedIn)
    {
        var userClaims = User.Identity as System.Security.Claims.ClaimsIdentity;
        //string sessionToken = Session.SessionID;
        string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (String.IsNullOrEmpty(ipAddress))
            ipAddress = Request.ServerVariables["REMOTE_ADDR"]; 


        var dbContext = new GetOfficeEduUsersEntities();
        var token = new T_APIToken();
        string office365Id = userClaims?.FindFirst("preferred_username")?.Value;

        token.TokenID = office365Id;
        token.IssuerID = office365Id; 
        token.IssueDT = DateTime.Now;
        token.ExpireDT = DateTime.Now.AddMinutes(180);

        dbContext.T_APIToken.Add(token);
        dbContext.SaveChanges();

        return RedirectToAction("Index", "Home");
    }
    else
    {
        //Error
        return RedirectToAction("SignedIn"); 
    }
}