Java:在Glassfish上通过JAAS保护的Restful API(Jersey)对用户进行身份验证

Java:在Glassfish上通过JAAS保护的Restful API(Jersey)对用户进行身份验证,java,web-services,rest,authentication,glassfish,Java,Web Services,Rest,Authentication,Glassfish,我已经使用Jersey为我的简单应用程序实现了一个RestfulAPI,这个API(restfulwebservice)受JAAS(Java身份验证和授权服务)的保护 现在,如果用户尝试访问类似于example.com/api/user/info/1的URL,浏览器中会出现一个弹出窗口(BASIC-Authentication),在成功登录时输入用户名和密码,用户可以看到结果(success) 到目前为止还不错 现在我正在考虑第三方应用程序,它将访问我的Restful web服务。必须在访问任何

我已经使用
Jersey
为我的简单应用程序实现了一个
Restful
API,这个API(restfulwebservice)受
JAAS
(Java身份验证和授权服务)的保护

现在,如果用户尝试访问类似于
example.com/api/user/info/1
的URL,浏览器中会出现一个弹出窗口(
BASIC
-Authentication),在成功登录时输入用户名和密码,用户可以看到结果(success)

到目前为止还不错

现在我正在考虑第三方应用程序,它将访问我的Restful web服务。必须在访问任何端点之前进行身份验证。(我知道未经身份验证的用户是否会尝试访问我的端点URL,JAAS将拦截该URL)

我还知道,如果我在请求头中提供用户名和密码,JAAS也会自动对其进行身份验证

困惑:

1-我不想在每个请求中嵌入用户名和密码(我不知道为什么,但我只是不想要它(请分享您的评论)),这样,如果我访问安全端点,就可以自动获得身份验证。我只想验证一个用户并生成一个令牌,然后在其余的通信中使用该令牌

2-我想为第三方应用程序提供一些端点,以便有意启动身份验证过程。
example.com/api/authenticate
但用户名和密码仍在标题中。当端点的相对方法被调用时,它将从该请求的头中提取用户名和密码。我知道有两个注释
@QueryParam
@FormParam
,但我想要类似
@HeaderParam
的注释。 为什么?我认为这样更安全。(是这样吗?)

3-我尝试了多种编程登录技术,但在
Glassfish
上似乎都不起作用,所以这对Glassfish是不可能的吗?我使用的是基于领域的JAAS

4-我正在寻找某种方法,一旦我对用户进行了身份验证,就可以在会话中添加一些信息。在任何其他请求中,从会话获取该信息。(我使用基于Jersey的类作为端点,使用EJB作为业务逻辑)-我知道在EJB中,我们可以通过上下文查找主体,然后从数据库等中检索用户记录。但是Jersey端点类是否可以添加到会话中,并将其返回到任何其他端点类中

5-第三方应用程序保存my Webservice返回的Cookie并将其嵌入下一个请求中是否足以为JAAS身份验证用户进行长时间会话(这样就不需要对每个请求进行身份验证)

@Path("authenticate")
public String authenticate( ) {

}