猿问

WebApi OWIN 相同令牌对两个不同的服务实例有效

我使用 OWIN 库创建了 WebApi selfhost 服务。除了一些身份验证问题外,一切都很好。我已经在服务器上启动了该服务的两个实例,结果发现从一项服务获得的令牌对第二项服务有效!据我所知,OWIN 使用一些保护密钥来验证令牌。问题是:

  1. 如何使密钥对另一个服务实例无效?我尝试使用 Generate-MachineKey 生成自定义密钥,但结果是一样的。

  2. OWIN 使用的保护密钥是什么?它存储在某个地方吗?

  3. 对于不同的应用程序,此密钥是否有所不同?

设置:

var oAuthOptions = new OAuthAuthorizationServerOptions

{

    TokenEndpointPath = new PathString("/token"),

    AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(accessTokenExipreMinutes),

    Provider = new AuthorizationServerProvider(),

    AllowInsecureHttp = allowInsecureHttp

};


appBuilder.UseOAuthBearerTokens(oAuthOptions);  

授权服务器提供者:


class AuthorizationServerProvider : OAuthAuthorizationServerProvider

{

    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)

    {

        context.TryGetFormCredentials(out string clientId, out string clientSecret);


        var result = Validate(clientId, clientSecret);

        if (result)

        {

            context.Validated(clientId);

            return;

        }


        context.Rejected();

    }


    public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)

    {

        try

        {

            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);

            var props = new AuthenticationProperties();

            var ticket = new AuthenticationTicket(oAuthIdentity, props);


            context.Validated(ticket);

        }

        catch (Exception ex)

        {

            context.Rejected();

        }


        return Task.FromResult(true);

    }

}


一只名叫tom的猫
浏览 153回答 1
1回答
随时随地看视频慕课网APP
我要回答