2014-10-20 5 views
0

У меня есть приложение, которое делает вызовы внешним (сторонним) службам и задается вопросом, могу ли я получить некоторую помощь по этому поводу.Доступ к сторонним службам с проверкой подлинности

Я пытаюсь выяснить, каким путем идти с парой вещей, и было интересно, если вы имели какие-либо вход и/или опыт о том, как справиться с определенной ситуацией

  1. Мы хотим быть способный создавать архитектуру, где служба обрабатывает сторонние вызовы, чтобы клиент не нуждался в знании того, к какой услуге он обращается. Например, если у нас есть способ интегрироваться с третьей стороной, такой как DocuSign для подписания документа, клиент должен просто иметь возможность вызвать службу на нашей стороне, которая определяет (на основе некоторых учетных данных, аренды и т. Д.), С какой услугой она интегрируется с , Тем не менее, я начал создавать интерфейс, который все еще заставляет клиента определить, какую реализацию нужно создать и вызвать, и мы хотим попробовать и отделить это, если это возможно. a. Позвоните в нашу услугу «Подпись документа» с указанием какого-либо клиента и арендатора, с которыми мы работаем, возможно, через токен доступа. b. Затем этой службе подписания документа необходимо указать, какие учетные данные ему нужны, а также сообщить клиенту, как войти в эту службу. Например, может потребоваться перенаправить на сервер авторизации, чтобы получить токен доступа для отправки нашей услуги для совершения вызова.

  2. У нас также есть некоторая автономная обработка, которая должна быть выполнена, что может потребовать сторонние службы, которым требуется аутентификация, но клиент не запрашивает. Я начал сходить по пути хранения токена SAML и/или учетных данных пользователя, но это кажется очень неуверенным. Опять же, будучи псевдо-новичком IdM, не совсем уверен, как с этим справиться (Googling вызывает всевозможные варианты, но большинство, если не все, кажутся очень неуверенными). Я полагаю, что мы можем что-то сделать с помощью шифрования токенов и т. Д., Чтобы хранить вместе с ним, чтобы затем вызвать соответствующие серверы авторизации, когда придет время запустить задачу и получить токен.

Любые мнения о том, как правильно их обрабатывать?

ответ

0

ОК, прежде всего, вам нужно учитывать, что вы используете сторонние API-вызовы, чтобы делать все, что вам нужно, поэтому первое, что вам нужно иметь в виду, это то, что вам наверняка понадобится токен доступа для ваших пользователей для доступа к этим API.

Итак, если вы говорите, что у вас могут быть разные сторонние API для одного пользователя, вам может понадобиться создать абстрактный класс, который имеет метод CALL(), который будет переопределен конкретными классами (один для каждой третьей стороной API), например:

public abstract class ApiData { 

//Your variables 

protected call(String url, //Some parameters) { 
//default body 
} 

После этого, вы можете создать класс, который будет переопределить ApiData Class. Например:

public class DocuSignApi extends ApiData { 

//Your variables 

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

Таким образом, всякий раз, когда вы создаете пользователя внутри вашей системы, вам нужно будет сохранить список ApiData для него, например:

public class MyUser { 
// All parameters 

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

} 

С этим, вы будете иметь для каждого пользователя, все вызовы Api, к которым он имеет доступ, вы можете перебирать в этом списке и для каждого элемента вызывать метод «call()» и он будет вызывать правый сторонний API.

Теперь, для входа в систему стороннего API, это зависит от каждого API.Вероятно, вы можете использовать один и тот же учетный ключ для каждого API и использовать его со всеми своими клиентами (у них не будет доступа к этому, вы можете зашифровать его в своей базе данных или где-нибудь в своем коде, например, файл свойств). Если каждый клиент имеет разные учетные данные в каждом API, вам также нужно будет также его зарегистрировать в каждом API и сохранить токен доступа сторонней стороны (база данных) и позволить ему использовать его до истечения срока его действия.

Я также предполагаю, что вы внедрили свой собственный вход в систему для своих пользователей. Я не уверен, спросите ли вы, что это лучший и безопасный способ сделать это, но если это так, я приведу вам пример. У меня много журналов в некоторых проектах, которые я сделал, и я использую логин OAUTH. В основном, что вы делаете, это запрос HTTP-заголовка, который шифрует ваши учетные данные, и затем вы позволяете пользователю входить в систему или нет, проверяя вашу базу данных, если данные для входа верны. Если вход успешно завершен, вы создаете токен доступа, сохраняете этот токен доступа в своей базе данных (с датой создания) и возвращаете его обратно своему пользователю, таким образом вы также можете использовать функциональность истечения токена, который является очень хорошей практикой ,

Надеется, что это помогает ..

Приветствия

Смежные вопросы