我正在尝试将api密钥身份验证提供程序与加密的消息传递插件结合在一起。
var client = new JsonServiceClient(home);
client.BearerToken = "somesecret";
有效
但是我希望我的apikey在消息中,所以我尝试了
var authResponse = client.Post(new Authenticate
{
provider = ApiKeyAuthProvider.Name,
UserName = "somesecret"
});
此信息在运行时失败,未验证401。
我如何使它工作?
答案 0 :(得分:1)
IAuthWithRequest
身份验证提供者,例如API Key Auth Provider,需要根据每个请求的请求发送,该请求的Authenticated User Session仅在请求的生存期内建立持续时间强>。它不能与Authenticate
服务一起使用,如您的示例所尝试的那样对客户端进行身份验证,它必须包含在对身份验证服务的每个请求中。
使用API密钥调用受保护服务的通常方法是仅填充BearerToken
属性:
var client = new JsonServiceClient(baseUrl) {
BearerToken = apiKey
};
这将让您致电[Authenticate]
服务:
var response = client.Get(new Secure { Name = "World" });
以前,您只能将User SessionId嵌入到加密消息请求中,但是我刚刚在Authenticating Encrypted Messaging Services中添加了BearerToken支持this commit,其作用类似于填充{{1 }},现在您可以通过让请求DTO实现SessionId
来填充API Key和JWT Auth Providers中使用的BearerToken
,例如:
IHasBearerToken
这将使您在调用受保护的服务时嵌入public class Secure : IHasBearerToken
{
public string BearerToken { get; set; }
public string Name { get; set; }
}
,例如:
BearerToken
与请求DTO中的所有内容一起嵌入和加密的位置。
或者,您也可以在IEncryptedClient encryptedClient = client.GetEncryptedClient(publicKey);
var response = encryptedClient.Get(new Secure { BearerToken = apiKey, Name = "World" });
上设置BearerToken
属性一次,它将自动在实现IEncryptedClient
的所有请求DTO上填充它,例如:
IHasBearerToken
v5.1.1(现在为available on MyGet)中提供了加密消息中新的BearerToken支持。