身份认证
根据你使用SKIL的方式,始终需要身份认证。有几种方法可以通过SKIL获得身份认证,本文档将指导你完成每种方法。
用户界面
image image.gif 要使用UI进行身份验证,请将浏览器导航到http://<SKIL_IP_Address>:9008/ 并输入以下凭据:
用户名
admin
**密码 **
admin
将<skil_ip_address>替换为SKIL实例的地址或主机名。如果你在本地启动了SKIL,那么这通常是localhost。如果你已经使用Docker启动SKIL,IP地址可能会有所不同。
HTTP API
SKIL API使用JSON Web令牌(JWT)RFC 7519 对HTTP上的请求进行身份认证。如果你不知道JWT,JWT网站有一些例子。
为请求获取可重用JWT的典型工作流是:
- 发送一个post请求到http://<SKIL_IP_Address>:<port>/login,JSON主体为
{"userId":"admin","password":"admin"}
,Content-type为application/json。 - 获取JSON响应的
token
字段。 - 在为HTTP请求使用JWT时,添加一个authorization头,其值为bearer[token],其中[token]替换为先前获得的JWT。
为了方便起见,还可以使用帮助类来自动获取JWT。
JAVA
/**
简单的帮助类,用于封装一些用于进行基本身份认证调用的原始REST代码
*/
private class Authorization {
private String host;
private String port;
public Authorization() {
this.host = "localhost";
this.port = "9008";
}
public Authorization(String host, String port) {
this.host = host;
this.port = port;
}
public String getAuthToken(String userId, String password) {
String authToken = null;
try {
authToken =
Unirest.post(MessageFormat.format("http://{0}:{1}/login", host, port))
.header("accept", "application/json")
.header("Content-Type", "application/json")
.body(new JSONObject() //使用它是因为字段函数无法转换为可接受的JSON
.put("userId", userId)
.put("password", password)
.toString())
.asJson()
.getBody().getObject().getString("token");
} catch (UnirestException e) {
e.printStackTrace();
}
return authToken;
}
}
image.gif
Zeppelin 工作间
image image.gif 由于工作间使用Apache Zeppelin作为解释器后端,你还可以通过导航到http://<SKIL_IP_Address>:8080来访问Zeppelin接口。如果你已将Zeppelin设置为非标准端口(如使用Docker时),请更改端口8080。
使用与SKIL用户界面相同的凭证进行身份认证。请注意,通常情况下,当工作间直接从SKIL使用时,Zeppelin会自动进行身份验证,但如果你直接访问了Zeppelin,则需要重新进行身份认证。
命令行 (CLI)
为了使命令行接口(cli)能够正确与SKIL一同工作,你需要使用正在运行的服务器进行身份认证。找到cli命令,然后键入:
Shell
./sbin/skil login --userId admin --password password
image.gif
用你的登录凭证替换“admin”和“password”,然后按下回车。如果验证成功,你将看到类似于以下内容的JSON响应:
INFO: {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJTa2lsVXNlciIsInN1YiI6IntcInVzZXJJZFwiOlwiYWRtaW5cIixcInVzZXJOYW1lXCI6XCJhZG1pblwiLFwicGFzc3dvcmRcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwiLFasoduyi5jwefuXCJ9IiwiaXNzIjoiU2tpbEF1dGhNYW5hZ2VyIiwiZXhwIjoxNTIyOTYxOTM5LCJpYXQiOjE1MjI4NzU1Mzl9.GHbb0LjEbO2av0CvBVlk4-Ks3l8S7znADI2yc_gLw0M"}
image.gif
除非你需要JWT用于自定义的程序,否则不需要保存此令牌。它在本地缓存。
网友评论