如何将 URL 中的 bearer access_token 传递给 ABP API 的 Get 请求
How to pass bearer access_token in URL for Get request to ABP API
我正在使用 ABP vNext v3.3,在请求 Header.
中传递 Bearer access_code 时调用 Api 没有问题
但是,我想将 access_code 直接放在 URL 中作为 link,然后用户只需单击 link 即可执行相同的操作。
有人知道这是否可能以及如何传递查询字符串吗?我试过了:
https://endpoint?access_code=[我的访问码]
https://endpoint?Authorization=Bearer+[我的访问码]
遗憾的是没有欢乐。
谢谢
在 header
中调用 api 时传递令牌
授权:承载+代码
使用这个link获得令牌
https://localhost:44319/connect/token
根据信息。我从 https://whosebug.com/a/21496536/10350621 获得,下面是我的实现,效果很好。
在 MyProjectNameHttpApiHostModule.cs 中,添加 JwtBearerEvents 以从 header 或 QueryString:
获取令牌
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]);
options.Audience = "MySystemName";
options.Events = new JwtBearerEvents()
{
OnMessageReceived = c =>
{
string authorization = c.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(authorization) && authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
{
c.Token = authorization.Substring("Bearer ".Length).Trim();
}
// If no authorization header found, then check access_token from QueryString
else
{
var accessToken = c.Request.Query["access_token"];
if (!string.IsNullOrEmpty(accessToken))
{
c.Token = accessToken;
}
}
// If no token found, no further work possible
if (!string.IsNullOrEmpty(c.Token))
{
return Task.CompletedTask;
}
c.NoResult();
return Task.CompletedTask;
}
};
});
}
}
我正在使用 ABP vNext v3.3,在请求 Header.
中传递 Bearer access_code 时调用 Api 没有问题但是,我想将 access_code 直接放在 URL 中作为 link,然后用户只需单击 link 即可执行相同的操作。 有人知道这是否可能以及如何传递查询字符串吗?我试过了:
https://endpoint?access_code=[我的访问码]
https://endpoint?Authorization=Bearer+[我的访问码]
遗憾的是没有欢乐。 谢谢
在 header
中调用 api 时传递令牌授权:承载+代码
使用这个link获得令牌
https://localhost:44319/connect/token
根据信息。我从 https://whosebug.com/a/21496536/10350621 获得,下面是我的实现,效果很好。
在 MyProjectNameHttpApiHostModule.cs 中,添加 JwtBearerEvents 以从 header 或 QueryString:
获取令牌private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]);
options.Audience = "MySystemName";
options.Events = new JwtBearerEvents()
{
OnMessageReceived = c =>
{
string authorization = c.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(authorization) && authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
{
c.Token = authorization.Substring("Bearer ".Length).Trim();
}
// If no authorization header found, then check access_token from QueryString
else
{
var accessToken = c.Request.Query["access_token"];
if (!string.IsNullOrEmpty(accessToken))
{
c.Token = accessToken;
}
}
// If no token found, no further work possible
if (!string.IsNullOrEmpty(c.Token))
{
return Task.CompletedTask;
}
c.NoResult();
return Task.CompletedTask;
}
};
});
}
}