我有一个前端 javascript (svelte) 和一个 go 后端 API。前端调用go后端URL从github生成OAuth2令牌。后端使用精心设计的 url 作为响应进行回复)
https://github.com/login/oauth/authorize?access_type=online&client_id=xxxxxxx&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fapi%2Fv1%2Fcallback&response_type=code&scope=user%3Aemail&state=state
该 url 由用户打开location.assign(authUrl);
实际的完整代码:
const authUrl = await fetch('http://localhost:8080/api/v1/authurl', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
}).then(res => res.json()).then(data => data.url);
// Redirect the user to the GitHub authorization URL
location.assign(authUrl);
Run Code Online (Sandbox Code Playgroud)
然后后端处理回调,然后执行交换并接收有效的 OAuth2 令牌(耶!)
从这里我需要通知客户交易已完成,但我不确定如何做到这一点(这是我坦白承认我在前端很糟糕并且没有太多经验的地方)。我决定向前端返回一个 httponly 会话 cookie,并将 GitHub OAuth2 令牌安全地存储在后端,但我应该如何将此令牌获取到前端以便它可以存储它?
请记住,没有从客户端获取数据,后端 API 通过回调启动。
我能做的一件事就是重定向;
cookie := &http.Cookie{
Name: "token",
Value: jwt_token,
MaxAge: 3600,
Path: "/",
Domain: "localhost",
Secure: false,
HttpOnly: true,
}
c.SetCookie(cookie.Name, cookie.Value, cookie.MaxAge, cookie.Path, cookie.Domain, …Run Code Online (Sandbox Code Playgroud) 我有标准 x509 PEM 证书
-----BEGIN CERTIFICATE-----
MIICNzCCAd2gAwIBAgITPLBoBQhl1hqFND9S+SGWbfzaRTAKBggqhkjOPQQDAjBo
MQswCQYDVQQGEwJVSzESMBAGA1UECBMJV2lsdHNoaXJlMRMwEQYDVQQHEwpDaGlw
cGVuaGFtMQ8wDQYDVQQKEwZSZWRIYXQxDDAKBgNVBAsTA0NUTzERMA8GA1UEAxMI
dGVzdGNlcnQwHhcNMjEwMzEyMjMyNDQ5WhcNMzEwMjI4MjMyNDQ5WjBoMQswCQYD
VQQGEwJVSzESMBAGA1UECBMJV2lsdHNoaXJlMRMwEQYDVQQHEwpDaGlwcGVuaGFt
MQ8wDQYDVQQKEwZSZWRIYXQxDDAKBgNVBAsTA0NUTzERMA8GA1UEAxMIdGVzdGNl
cnQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQRn+Alyof6xP3GQClSwgV0NFuY
YEwmKP/WLWr/LwB6LUYzt5v49RlqG83KuaJSpeOj7G7MVABdpIZYWwqAiZV3o2Yw
ZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQU
T8Jwm6JuVb0dsiuHUROiHOOVHVkwHwYDVR0jBBgwFoAUT8Jwm6JuVb0dsiuHUROi
HOOVHVkwCgYIKoZIzj0EAwIDSAAwRQIhAJkNZmP6sKA+8EebRXFkBa9DPjacBpTc
OljJotvKidRhAiAuNrIazKEw2G4dw8x1z6EYk9G+7fJP5m93bjm/JfMCdF==
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
我需要将主体剥离并放置在一条线上-----BEGIN CERTIFICATE-----。-----END CERTIFICATE-----
现在我可以编写一些正则表达式来执行此操作,但我想知道是否已经有 GoLang 惯用的方法来执行此操作,也许使用 x509 或加密模块。我对文档进行了很好的搜索,但什么也没看到。
我有一个字典形式的json列表,以下允许我从字典中获取值:
valone = out['red']['blue']['green']
valtwo = out['purple']['yellow']['black']
Run Code Online (Sandbox Code Playgroud)
从那里我可以围绕valone或valtwo运行条件语句,看看它们是否是绿色的黑色.
现在这种方法很有效,当这些键被填充时,但是当它们不是我得到的时候
KeyError: 'black'
Run Code Online (Sandbox Code Playgroud)
这是我可以看到的值是空的.
我很难在声明dict值之前弄清楚如何过滤掉.
我见过人们的建议
out.get("black", None)
Run Code Online (Sandbox Code Playgroud)
但我不能访问黑色,因为我是它的第三个价值?