gpt4 book ai didi

azure - 如何将 Azure ServiceBus EventProcessorHost 库与短期 SAS token 结合使用?

转载 作者:行者123 更新时间:2023-12-02 07:28:22 25 4
gpt4 key购买 nike

我调用了一个 REST 服务,它会分发短期(大约 20 分钟)的 SAS token ,以便从 Azure 事件中心读取数据。我想避免这样的解决方案:当 token 过期时,我必须拆除所有监听器并每 20 分钟重新创建它们。库是否支持接口(interface)或回调方法,我的代码可以在库需要时或 token 过期时提供 token ?

最佳答案

根据我的研究,EventProcessorHost类使用AMQP协议(protocol),通过sas key namesas key进行身份验证。sas token的概念里面找不到。

您可以关注code在这里接收事件。

此外,当您向eventhub发送消息时,可以找到sas token。您可以使用HTTP协议(protocol)生成sas token。过期。

您可以引用下面的java代码片段。

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Base64.Encoder;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class GetSasToken {

static String sasToken = "";

public static void main(String[] args) {

sasToken = GetSASToken(<resouce url>, <your sas_keyname>,
<your sas_key>);

try {
// your business logic


} catch (Exception e) {
e.printStackTrace();
sasToken = GetSASToken("jaygong.servicebus.windows.net/test", "RootManageSharedAccessKey",
"tASE61OxG4Ci00rfI0Q56NKNXGxvNL5tRSrBZkhTjgI=");
// retry your business logic
}

}

private static String GetSASToken(String resourceUri, String keyName, String key) {
long epoch = System.currentTimeMillis() / 1000L;
int time = 60 * 20;
String expiry = Long.toString(epoch + time);

String sasToken = null;
try {
String stringToSign = URLEncoder.encode(resourceUri, "UTF-8") + "\n" + expiry;
String signature = getHMAC256(key, stringToSign);
sasToken = "SharedAccessSignature sr=" + URLEncoder.encode(resourceUri, "UTF-8") + "&sig="
+ URLEncoder.encode(signature, "UTF-8") + "&se=" + expiry + "&skn=" + keyName;

System.out.println("sasToken : " + sasToken);
} catch (UnsupportedEncodingException e) {

e.printStackTrace();
}

return sasToken;
}

public static String getHMAC256(String key, String input) {
Mac sha256_HMAC = null;
String hash = null;
try {
sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
Encoder encoder = Base64.getEncoder();

hash = new String(encoder.encode(sha256_HMAC.doFinal(input.getBytes("UTF-8"))));

} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return hash;
}

}

您还可以引用official document生成 sas token 。

<小时/>

更新答案

如果您引用的是共享访问策略SharedAccessKey,则有两种方法可以更新此 key 。

第一种方法,您可以直接在门户上重新生成它。

enter image description here

第二种方式,您可以通过 REST API 重新生成它。请引用document在这里。

希望对您有帮助。

关于azure - 如何将 Azure ServiceBus EventProcessorHost 库与短期 SAS token 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45986588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com