C#Owin处理401访问令牌错误并使用刷新令牌重新生成访问令牌

问题描述 投票:0回答:1

我是这个论坛的新手,我希望专家能提供很多帮助,我们有一个项目,其中C#实现了OWIN身份验证,并且我们有用于UI的内部工具(使用旧的角度语言,javascript),很多缺陷,下面是一些问题。

  1. 如果访问令牌过期并且有一个访问受保护资源的调用,则此调用将无法完成,因此我们如何在使用刷新令牌生成新的访问令牌后使该调用完成,需要对此进行处理UI或服务端,是否有任何代码指针?

  2. 在UI中的访问令牌到期间隔之前使用刷新令牌生成访问令牌是一种好习惯吗?] >>

  3. Windows服务也使用了Api,因此,如果访问令牌过期,并且该服务命中具有过期令牌的任何api,它将引发未经授权的问题,但同样的问题是如何动态创建令牌并完成该调用。

  4. 对此的任何帮助,真的非常有用,等待您的答复,示例代码如下所示。

     public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider
        {
           private static ConcurrentDictionary<string, AuthenticationTicket> _refreshTokens = new ConcurrentDictionary<string, AuthenticationTicket>();
    
            public async Task CreateAsync(AuthenticationTokenCreateContext context)
            {
                var guid = Guid.NewGuid().ToString();
    
    
                _refreshTokens.TryAdd(guid, context.Ticket);
    
                // hash??
                context.SetToken(guid);
            }
    
            public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
            {
                AuthenticationTicket ticket;
    
                if (_refreshTokens.TryRemove(context.Token, out ticket))
                {
                    context.SetTicket(ticket);
                }
            }
    
            public void Create(AuthenticationTokenCreateContext context)
            {
                throw new NotImplementedException();
            }
    
            public void Receive(AuthenticationTokenReceiveContext context)
            {
                throw new NotImplementedException();
            }
        }
    
        // Now in my Startup.Auth.cs
        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/api/token"),
            Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) ,
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(2),
            AllowInsecureHttp = true,
            RefreshTokenProvider = new RefreshTokenProvider() // This is my test
        };
    

我是这个论坛的新手,我希望从专家那里获得很多帮助,我们有一个项目,其中C#实现了OWIN身份验证,并且我们有用于UI的内部工具(使用旧的角度语言,...] >

1)因为我不知道您的Angular版本,所以我实际上不能提供任何代码指针,但是到目前为止,我的工作方式是为您的请求提供某种Interceptor。它会查找来自API的所有未经授权的状态代码,缓存请求,尝试命中刷新令牌端点,如果刷新请求成功,则使用新的访问令牌重新发送缓存的请求。

[您还可以尝试实现一个拦截器,该拦截器检查访问令牌的到期日期,如果还剩5分钟有效期,则单击刷新令牌的终结点。

2)我想说的是刷新令牌通常用于已过期的访问令牌。

3)我不知道您对这些Windows服务有多少控制权,但是据我所知,应该在客户端上处理刷新令牌流。

javascript c# asp.net-mvc security owin
1个回答
0
投票

1)因为我不知道您的Angular版本,所以我实际上不能提供任何代码指针,但是到目前为止,我的工作方式是为您的请求提供某种Interceptor。它会查找来自API的所有未经授权的状态代码,缓存请求,尝试命中刷新令牌端点,如果刷新请求成功,则使用新的访问令牌重新发送缓存的请求。

© www.soinside.com 2019 - 2024. All rights reserved.