What is the name of Salesforce database application? - salesforce

I want to use Salesforce DB and Airbyte.
First step is to configure connection to Salseforce.
It's needed to provide Client ID and Client Secret.
Following official guide:
https://developer.salesforce.com/forums/?id=9062I000000DLgbQAG
I found out that I need to know the name of my application which have both of Client ID and Client Secret.
I went to App Manager at Salesforce and have seen a lot of applications, but I could not determine which application linked to Salesforce database.
Any help appreciated

Make your own "connected app" for this specific integration purpose where you decide the name and what you allow the app to do on user's behalf (the oauth scopes), which websites are allowed to use it (which callback URLs are allowed)... In that sense all connected apps you see in there already potentially can connect to database - depends if they have API access scope.
"App" created in any org can be used to connect to any org (imagine making a mobile application - you'd want just 1 set of client I'd and secret to maintain, not separate keys for every org your app would be connecting to). But if you create it in sandbox and later delete /refresh the sandbox - the app will be destroyed and the keys useless.

Related

Build salesforce integration like hubspot or workbench

I'm created a connected app in salesforce and consume contacts in my application, but for this, a need a consumer key from connected app.
I would like to create an application that consumes my customers' contacts without them having to create a connected app and generate a consumer key, in order to access their list
I saw this in a hubspot integration in salesforce, where it was possible to install a hubspot package and consume the contacts, I tried to create something on the appExchange but I was unsuccessful.
Can anyone tell me a tutorial for this? I've been searching for days and I can't find anything.
without them having to create a connected app and generate a consumer
key
Good. They don't have to. Have you actually tried connecting with 1 org's client id/secret to another org? Have you hit any issues?
Think about it. You're making a new awesome mobile app that connects to Salesforce. You'll want to make it work just like that, on any phone, any SF org, without org admins having to do any installation steps. You can generate OAuth2 keys in any org, even your personal Developer Edition. You could generate them in sandbox - but they'll be deleted when you refresh it.
Check if my answer https://stackoverflow.com/a/69810951/313628 helps you understand the whole thing.
Now, there might be some things you do want in every org, maybe some config custom table... You'd have your mobile app and then maybe a Salesforce plugin published on AppExchange. But that's battle for another day and you don't need it for basic functionality.

How do I authenticate users of a web-app to access GCP data relevant only to them?

I have spent 3 days researching this problem and cannot find a solution or similar use case that shows how to solve the problem, so any pointers would be greatly appreciated.
I am creating a web-app that uses Google Cloud Storage and Bigquery. A user registers on the web app and then can upload data to Cloud Storage and Big Query. Two users could be from the same company and therefore should be able to view the same data - i.e. Jack and Jill work for company A and if Jack uploads a massive dataset via this app, Jill should also be able to view it later.
Another scenario will be I have two completely separate clients with users using this web-app. If users from Company A upload data, users from Company B should not be able to view Company A's data, and vice versa. But users from the same company should be able to view the data within their company.
Currently, I have an app that works for a single company. This has a React front-end that uses Firebase for authentication. Once the user is logged in, they can use the app which sends off API calls to a Flask back-end that does some error checking and authentication checking and then fires off an API call to GCP. This uses a service account and the key is loaded as an environment variable in the environment in which the Flask app is running.
However, if Company B want to use the app now, both Company A and Company B will be able to see each other's data and visualize it through the app. In addition, they will be sharing a project (I would like to change this to allocate billing more easily to have each client have their own project).
I ultimately want to get this app onto Kubernetes and ensure that each company is independent of each other, however, do not want to have to have separate URL's for every company using the app. Also, I want to abstract GCP away from the client. I would prefer to authenticate a user based on their login credentials and then they will be given access to their GCP project (via my front-end) accordingly.
I thought about perhaps having separate service keys for each client and then storing the service key info in Firebase, while using the respective keys for API calls but not sure this is best practice. It is however the only strategy I can think of.
If anyone could provide some help or guidance it would be very much appreciated. This is my first GCP project and have not been able to find any answers on GCP, SO, Google Groups, Slack or Medium.
Thanks,
TJ
First if all, welcome on GCP! It's an awesome platform, very powerful and flexible. But not magic.
Indeed, the use case that you describe is specific to your business logic. GCP provides told for securing access for user and VM(through service account) but not for customer. Here you have to implement your own custom and authorisation logic, with a database (I don't recommend bigquery for website, the latency is too high) to list three users, the companies where they work, the blobs of each company...
Nothing is magic and your use case specific.
If you want to discuss more about which component to use and to start, no problem. Let a comment.

Is it best practice to connect directly to an aws db instance in an app

I am new to web development, and have seen posts such as these . If one is using AWS and is connecting to an AWS rds instance through Node, is that still considered a direct connection as opposed to a web service?
You're probably going to get a bunch of conflicting opinions on this. My personal opinion is a web service in front of your database makes sense in some scenarios. Multiple applications connecting to the web service instead of directly to the db gives several advantages, security, caching, etc.
That being said, if this is just a single app then most of those advantages disappear and in fact just make things more complex for you. You're going to have to setup your web service for the db as well as your actual code.
If one is using AWS and is connecting to an AWS rds instance through Node, is that still considered a direct connection as opposed to a web service?
No, if Node.js is running on a server or in "serverless" containers (e.g. AWS Lambda) that is not a direct connection. That is a web service, and that's what you want.
A direct connection means the app connects to the database itself... but that requires embedding credentials in the app.
You do not want to embed anything in your app that you would not willingly hand over to an arbitrary user -- such as database credentials and API keys -- because you cannot trust that the app won't be reverse-engineered.
You should design the app in such a way that you would have no security concerns if the entire source code of the app were exposed, because knowing everything about the app's internals would give a malicious actor no valuable information. How? The code on the server side (e.g. in Node.js) should treat every request from the app as potentially suspicious, untrustworthy, etc., and validates every request to do anything.
This layer of separation is one of the strongest reasons why you never give the app direct access to the database. Code running in a trusted place -- your web server/API layer -- needs to vet every database interaction. This topology also decouples the app user from tying up resources on the database server when not actually interacting with the database, which is far less practical with a direct connection.

How to share the same ClientId in two different environments (sandbox and production)

I'm developing an API using IdentityServer4 for authentication. I have already configured the stores to use EF Core and I'm using Asp.Net Identity too.
To improve the experience of the users, we want them to try our API on sandbox after signing up and offering them an autogenerated ClientId and ClientSecret. Once they want to go to production, we want to generate another ClientSecret for the production environment.
In other words, we want to reuse the ASP.NET Identity user and the IdentityServer client except for the secret.
We have different urls, databases, etc. for sandbox and production. Currently we are using two different IdentityServer servers and databases, but we are considering to share the same IdentityServer server and database for both environments.
Is this scenario supported in any way?
EDIT 1:
As stated on a comment to the response of travis.js, environments should be called live and sandbox instead of production and sandbox, as both environments are production ready to my clients.
EDIT 2:
The app embedding IdentityServer and Asp.Net Identity is the app that will manage the sign up, so the live and sandbox API will ask this app for authentication.
You'll run into problems trying to reuse the same the IdentityServer app/db under different urls. The hostname of your IdentityServer instance part of what make it unique and authoritative. One instance can't have two different authority names to my knowledge.
Sounds like a basic data migration issue, i.e., you just need to some of the sandbox config data moved up the production database.
Whatever app handles the user registration and "go live" features can do that work. It would just need access to both databases.

Backend for iOS app

My question is how do i get information from a server to my iphone app. let's assume I have completed my current project I'm working on that only needs data to be uploaded to my application.
I understand there is a database or server I must create but how do I go about creating or modifying one for my needs.
I mainly want to store login information from one user and allow users to search for people who have entered login information (name) to add to a friends lists within the current app.
i think in your case you can use Django-tastypie for backend will be good choice.since using django you can develop it in quick time and the tastypie has api services which can used easily for retrieval and sending data
you can go through this
http://django-tastypie.readthedocs.org/en/latest/
Take a look at services like Stackmob or Parse. These types of service could make it really easy for you to get the server side part of your application up and running. These services would act as your database and also provide an easy api for you to access the server side pieces.

Resources