【问题标题】:Hybrid Flow Client Credentials OAuth 2.0混合流客户端凭据 OAuth 2.0
【发布时间】:2019-11-04 09:48:06
【问题描述】:

我在 .net core 中有一个 web api

并通过单独的身份服务器受到客户端凭据和授权流的保护

我有某些 api 调用,我希望具有特定角色的用户可以访问,这很容易

我还有系统 api 调用,这些调用只能由 client_credentials 调用 机器对机器。

仅仅放置一个 [Authorize] 属性是不够的,因为这意味着任何用户都可以调用它。

如何识别客户凭证账户并限制方法?

【问题讨论】:

    标签: c# oauth-2.0 asp.net-core-webapi


    【解决方案1】:

    从客户端凭据流发出的令牌没有sub 声明,因为没有用户存在。您可以添加策略来检查是否有sub 声明:

    services.AddAuthorization(options =>
    {
        options.AddPolicy("ClientCredentialOnly", policy =>
        {
            policy.RequireAssertion(context =>
            {
                //Here you can get many resouces from context, i get a claim here for example
                var sub= context.User.Claims.FirstOrDefault(x => x.Type == "sub")?.Value;
    
                return sub==null;
            });
        });
    }); 
    

    【讨论】:

    • 这不是倒退吗? CientCredentialsOnly “需要”声明子?
    • @drowhunter 。哦,我的错,你可以手动检查索赔。查看更新的回复
    • 更好,但您是否还需要确保使用的是 loggen?
    • 不需要,app.UseAuthentication();将确保用户通过身份验证,如果没有,它不会变成您的授权策略。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2016-09-13
    • 2019-12-03
    • 2014-05-04
    • 2017-09-06
    • 2016-07-02
    相关资源
    最近更新 更多