When developing app aka add-in with Visual Studio 2012/2013, Client ID is being taken care of automatically.
However, at the time of deploying app, you must register it with both Client ID and Client Secret generated using appregnew.aspx
. App domain is where your web application is being hosted could be Azure/on-prem server.
The appregnew.aspx
should look like this:

Once you get the Client ID and Client Secret, you simply register it in app publishing dialog in Visual Studio.

Upload the *.app package file of the app for SharePoint to the organization app catalog.
Publishing the web application part on Azure before testing app (you must enable https between app and remote web application)
Install the app on site collection and you're good to test the app.
P.S. At the time of publishing the app, Publish Profile (.pubxml) will automatically update the Client ID and Client Secret as a part of deployment in both App and web application project.
Happy SharePointing!
Updat:
Check if https
is used to refer remote application in Appmanifest.xml?
<?xml version="1.0" encoding="utf-8"?>
<!--Published:70EDFC97-B41D-43C5-B751-7C00AD999804-->
<!--Created:cb85b80c-f585-40ff-8bfc-12ff4d0e34a9-->
<App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest" Name="App" ProductID="{76c0e74b-e6f8-4a3c-883e-aee307ff6a33}" Version="1.0.0.1" SharePointMinVersion="15.0.0.0">
<Properties>
<Title>TestApp</Title>
<StartPage>https://appdomain.lokal/TestApp/?{StandardTokens}</StartPage>
</Properties>
<AppPrincipal>
<RemoteWebApplication ClientId="SomeGuid" />
</AppPrincipal>
</App>
Why aren't you using new abstract and concrete classes to develop provider hosted apps? Microsoft is taking care of all nitty gritty and encapsulating the details of ACS (a low-trust app) or S2S apps (a high-trust app). Check out the Kirk's blog for more details
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
clientContext.Load(clientContext.Web, web => web.Title);
clientContext.ExecuteQuery();
Response.Write(clientContext.Web.Title);
}