Rest 通过身份验证访问第三方服务

Rest 通过身份验证访问第三方服务,rest,oauth,identity,ws-federation,bearer-token,Rest,Oauth,Identity,Ws Federation,Bearer Token,我有一个打电话给外部第三方服务的应用程序,我想知道是否可以在这方面得到一些帮助 我正试图找出处理一些事情的方法,我想知道你是否对如何处理某些情况有任何意见和/或经验 我们希望能够创建一个体系结构,其中服务处理第三方调用,这样客户机就不需要知道它正在访问哪个服务。例如,如果我们有一种与第三方集成的方法,比如DocuSign,用于文档签名,那么客户端应该能够调用我们端的服务,该服务根据一些凭据、租约等来确定它与什么服务集成。然而,我一开始创建了一个接口,它仍然让客户机决定实例化和调用什么实现,如果可

我有一个打电话给外部第三方服务的应用程序,我想知道是否可以在这方面得到一些帮助

我正试图找出处理一些事情的方法,我想知道你是否对如何处理某些情况有任何意见和/或经验

我们希望能够创建一个体系结构,其中服务处理第三方调用,这样客户机就不需要知道它正在访问哪个服务。例如,如果我们有一种与第三方集成的方法,比如DocuSign,用于文档签名,那么客户端应该能够调用我们端的服务,该服务根据一些凭据、租约等来确定它与什么服务集成。然而,我一开始创建了一个接口,它仍然让客户机决定实例化和调用什么实现,如果可能的话,我们希望尝试分离它。 A.调用我们的“文档签名”服务,并指明我们正在使用的客户端和租户,可能是通过访问令牌。 B然后,文档签名服务需要指出它需要什么类型的凭据,并让客户端知道如何登录到该服务。例如,它可能希望重定向到授权服务器,以获取访问令牌,并将其发送到我们的服务以进行呼叫

我们还需要进行一些离线处理,这些处理可能会调用需要身份验证的第三方服务,但没有需要提示的客户端。我开始着手存储SAML令牌和/或用户凭据,但这似乎非常不安全。同样,作为一名IdM伪新手,不太清楚如何处理谷歌搜索带来了各种选择,但大多数(如果不是全部的话)似乎都非常不安全。我想我们可以对令牌进行加密,等等,将其存储在一起,然后在运行任务和接收令牌时调用相应的授权服务器


关于如何正确处理这些问题的任何意见?

< P> OK,首先你需要考虑使用第三方API调用来做你需要做的任何事情,所以首先要记住的是,你一定需要访问令牌让你的用户访问那些API。 因此,如果您说可以为一个用户提供各种第三方API,那么您可能需要创建一个抽象类,该类具有一个调用方法,该方法将被每个第三方API的一个具体类覆盖,例如:

public abstract class ApiData {

//Your variables

protected call(String url, //Some parameters) {
//default body
}
public class DocuSignApi extends ApiData {

//Your variables

@Override
private call(String url, //Some parameters) {
// APi call for DOCUSIGN
}
public class MyUser {
// All parameters

private List<ApiData> apiCalls = new ArrayList<ApiData>();

}
在此之后,您可以创建一个将覆盖ApiData类的类。例如:

public abstract class ApiData {

//Your variables

protected call(String url, //Some parameters) {
//default body
}
public class DocuSignApi extends ApiData {

//Your variables

@Override
private call(String url, //Some parameters) {
// APi call for DOCUSIGN
}
public class MyUser {
// All parameters

private List<ApiData> apiCalls = new ArrayList<ApiData>();

}
这样,无论何时在系统中创建用户,都需要为其保存ApiData列表,例如:

public abstract class ApiData {

//Your variables

protected call(String url, //Some parameters) {
//default body
}
public class DocuSignApi extends ApiData {

//Your variables

@Override
private call(String url, //Some parameters) {
// APi call for DOCUSIGN
}
public class MyUser {
// All parameters

private List<ApiData> apiCalls = new ArrayList<ApiData>();

}
有了它,您将拥有每个用户可以访问的所有Api调用,您可以迭代该列表,并为每个元素调用调用该调用 方法,它将调用正确的第三方API

现在,对于第三方API登录,它取决于每个API。也许,您可能希望对每个API使用同一个凭据,并将其用于您的每个客户机—他们无权访问该凭据—您可能会在数据库或代码中的某个位置对其进行加密,例如属性文件。如果每个客户端在每个API中都有不同的凭据,那么您也需要在每个API上记录他,并将第三方访问令牌保存到其他地方的数据库中,并允许他使用该凭据,直到到期

我还猜测您已经为您的用户实现了自己的登录服务。我不确定你是否在问什么是做这件事的最好和安全的方法,但如果是这样的话,我会给你一个例子。在我所做的一些项目中,我有大量的登录,我使用的是OAUTH登录。基本上,您所做的是通过HTTP头请求加密您的凭据,然后通过检查您的数据库(如果登录数据正确),允许用户登录或不登录。如果登录成功,您可以创建一个访问令牌,将该访问令牌与创建日期一起保存在数据库中,并将其返回给用户,这样您还可以拥有使令牌过期的功能,这是一种非常好的做法

希望这有帮助

干杯