标签: api-authorization

为什么RequiredScope属性没有任何作用?

根据此 Microsoft 文档,您应该能够将 [RequiredScope("SomeScopeName")] 等属性应用到控制器级别或操作级别以保护 API。但是当我在 API 中尝试它时,它似乎根本没有任何效果 - 无论我使用什么范围名称(我确保令牌中没有该名称的范围),我总是正确的进入我应该失败的 API 操作。但与此同时,我的策略属性,例如 [Authorize(Policy = "PolicyName")],工作得很好。我缺少什么?

[ApiController]
[RequiredScope("AnyRandomName")]
public class MyApiController : ControllerBase
{
Run Code Online (Sandbox Code Playgroud)

更新

这是我的 Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        IdentityModelEventSource.ShowPII = true; 
        services.AddControllers();

        services.AddSwaggerGen(opt =>
        {
            opt.CustomSchemaIds(type => type.ToString() + type.GetHashCode()); 
        });

        services.Configure<HostOptions>(Configuration.GetSection(HostOptions.HOST));

        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 
        JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
        services.AddAuthentication("Bearer").AddJwtBearer(options =>
        {
            options.Authority = Configuration[HostOptions.IDENTITYGATEWAY];
            options.SaveToken = true;
            options.TokenValidationParameters = new TokenValidationParameters …
Run Code Online (Sandbox Code Playgroud)

api-authorization asp.net-core-webapi

6
推荐指数
2
解决办法
7706
查看次数

将标头中的令牌传递给 Prophet 21 API

这是我第一次使用 Epicor 的 Prophet 21。在使用用户帐户进行身份验证后,我很难弄清楚如何在 HTTP 请求标头中传递令牌。

https://localhost:4443/api/security/token/?username= {USERNAME}&password={PASSWORD}

返回令牌,但我不确定应将请求标头设置为什么。我尝试过 Token、AccessToken 和一堆其他组合,但我总是收到此消息:

<TokenError xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Description>Token Validation Exception Occured</Description>
    <Error>invalid_request</Error>
    <Uri/>
</TokenError>
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的示例:

https://localhost:4443/api/inventory/v2/parts/

标题

Token = token eoWffZR0PlReRLwHopOTNSoBccwj96VSkjGYX2QnGdLjqY10mREmjwh4GDXqpf7HBBHrFImN3T4RtHEPjBK+VQ5EniquqnBbOAvlzf+5amV3rKDB67w5XbyoOzD2YSiFOULoRRY2Iaxe7pAy5JaWQ==

Token = eoWffZR0PlReRLwHopOTNSoBccwj96VSkjGYX2QnGdLjqY10mREmjwh4GDXqpf7HBBHrFImN3T4RtHEPjBK+VQ5EniquqnBbOAvlzf+5amV3rKDB67w5XbyoOzD2YSiFOULoRRY2Iaxe7pAy5JaWQ==
Run Code Online (Sandbox Code Playgroud)

我不会包括更​​多的例子,但我已经尝试了各种组合。我还查看了非常无用的 SDK 文档。例如,这里是 JavaScript 代码示例,但它包含文档中没有的函数,因此我看不到它是如何构建请求的。

<script type="text/javascript">
     var gToken;

     function getTokenUI(){
         var userName = $('#name').val();
         var passWord = $('#password').val();
         var jsonToken = getToken(userName, passWord)
         gToken = jsonToken.AccessToken
         $('#return ul').append('<li>' + gToken + '</li>');
     }   

     function getOppUI() {
         var oppID = $('#oppid').val();
         var xhr = ajaxRequest("GET", OppResourceURL(oppID), null, "json", gToken); …
Run Code Online (Sandbox Code Playgroud)

php postman epicorerp api-authorization epicor

3
推荐指数
1
解决办法
669
查看次数

ASP Core 3.0 API 令牌自定义令牌身份验证(不是 jwt!)

我们有一个 ASP CORE 3 API 项目,我们需要使用 API 令牌来保护它。这些 API 令牌将从数据库中提供和加载,但作为概念证明,我们将进行硬编码以进行测试。我们查看的所有令牌授权都是指 JWT。我们不想使用 JWT。我们只是提供允许访问我们的 API 的 API 密钥 - 然后用户可以通过在标头中传递令牌来调用 API 方法,例如 X-CUSTOM-TOKEN:abcdefg。

如何修改 startup.cs 和管道,以便在每个请求上检查此 X-CUSTOM-TOKEN 标头?在正确方向上的简单点会很棒。

编辑:好的,这看起来是一个很好的开始!非常感谢!

您的示例似乎表明用户 API 令牌是用户令牌。我们的要求是我们需要一个 API Key 来使用 API,然后还需要一个 User Token 来调用某些控制器。

示例:myapi.com/Auth/SSO(通过API Token和User Information登录,返回User信息+User Token)

myapi.com/Schedule/Create(需要 API 令牌标头和带有用户令牌的标头)

您能否建议如何修改您的代码以支持这一点?

asp.net api-authorization asp.net-core

3
推荐指数
1
解决办法
2419
查看次数

Springboot过滤器在permitAll urls的情况下也执行

我是 springboot 的新手,并试图实现安全性,其中没有过滤器应用于我的登录、注册和主页 url。

我使用的是springboot 2.7.1

我希望antMatchers("/**/signup").permitAll()不受任何安全过滤器的影响。

调试后,我发现我的注册网址被命中,用户详细信息被保存,但我的 AuthorizationFilter 也被执行。

这是我的 SecurityFilterChain :

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        AuthenticationManagerBuilder authenticationManagerBuilder=http.getSharedObject(AuthenticationManagerBuilder.class);
        authenticationManagerBuilder.userDetailsService(userLoginService).passwordEncoder(bCryptPasswordEncoder);
        AuthenticationManager authenticationManager=authenticationManagerBuilder.build();

        http.csrf().disable().authorizeHttpRequests()
                .antMatchers("/**/login").permitAll()
                .antMatchers("/**/signup").permitAll()
                .antMatchers("/home/**").permitAll()
                .anyRequest().authenticated().and()
                .addFilter(getAuthenticationFilter(authenticationManager))
                .addFilter(new AuthorizationFilter(authenticationManager))
                .authenticationManager(authenticationManager)
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        return http.build();
    }
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样。

authentication spring-security spring-boot api-authorization

0
推荐指数
1
解决办法
1717
查看次数