Skip to content

Commit a557799

Browse files
committed
Config AWS AppConfig + HttpClient Cognito update
1 parent 0cd57cb commit a557799

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

config/index.html

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
</ul>
5757
</li>
5858
<li><a href="#plugins">ConfigurationSource</a></li>
59+
<li><a href="#aws-appconfig">AWS AppConfig</a></li>
5960
<li><a href="#logging">Event Logging</a></li>
6061
</ul>
6162
</nav>
@@ -522,6 +523,59 @@ <h2 id="plugins">ConfigurationSource Plugins</h2>
522523
Refer to the example plugin - <a href="https://github.com/avaje/avaje-config/blob/master/avaje-config/src/test/java/org/example/MyExternalLoader.java">MyExternalLoader.java</a>
523524
</p>
524525

526+
527+
<h2 id="aws-appconfig">AWS App Config</h2>
528+
<p>
529+
If using AWS App Config as a configuration source (refer: <a href="https://docs.aws.amazon.com/appconfig/">https://docs.aws.amazon.com/appconfig</a>),
530+
then we can use the <em>avaje-aws-appconfig</em> component.
531+
</p>
532+
533+
<h4>Step 1: Add dependency</h4>
534+
<div class="syntax xml"><div class="highlight"><pre><span></span><span class="nt">&lt;dependency&gt;</span>
535+
<span class="nt">&lt;groupId&gt;</span>io.avaje<span class="nt">&lt;/groupId&gt;</span>
536+
<span class="nt">&lt;artifactId&gt;</span>avaje-aws-appconfig<span class="nt">&lt;/artifactId&gt;</span>
537+
<span class="nt">&lt;version&gt;</span>1.2<span class="nt">&lt;/version&gt;</span>
538+
<span class="nt">&lt;/dependency&gt;</span>
539+
</pre></div>
540+
</div>
541+
542+
<h4>Step 2: Add configuration</h4>
543+
<p>
544+
In src/main/resources add configuration like below to specify for <em>aws.appconfig</em> the <em>application, environment, configuration</em>.
545+
</p>
546+
<div class="syntax yml"><div class="highlight"><pre><span></span><span class="c1"># In src/main/resources</span>
547+
<span class="nt">aws.appconfig</span><span class="p">:</span>
548+
<span class="nt">application</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">&#36;{ENVIRONMENT_NAME:dev}-my-application</span>
549+
<span class="nt">environment</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">&#36;{ENVIRONMENT_NAME:dev}</span>
550+
<span class="nt">configuration</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">default</span>
551+
</pre></div>
552+
</div>
553+
554+
<p>
555+
In src/test/resources add <em>aws.appconfig.enabled: false</em> to disable loading the AWS App Configuration when running tests.
556+
</p>
557+
<div class="syntax yml"><div class="highlight"><pre><span></span><span class="c1"># In src/test/resources</span>
558+
<span class="nt">aws.appconfig.enabled</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">false</span>
559+
</pre></div>
560+
</div>
561+
562+
<h4>Logging</h4>
563+
<p>
564+
When Config starts up we show see <em>ConfigurationSource:AppConfigPlugin</em> included in the <em>Loaded properties from ...</em> log message like:
565+
</p>
566+
<div class="syntax json"><div class="highlight"><pre><span></span><span class="p">{</span><span class="nt">&quot;level&quot;</span><span class="p">:</span><span class="s2">&quot;INFO&quot;</span><span class="p">,</span>
567+
<span class="nt">&quot;logger&quot;</span><span class="p">:</span><span class="s2">&quot;io.avaje.config&quot;</span><span class="p">,</span>
568+
<span class="nt">&quot;message&quot;</span><span class="p">:</span><span class="s2">&quot;Loaded properties from [resource:application.yaml, ConfigurationSource:AppConfigPlugin] &quot;</span><span class="p">}</span>
569+
</pre></div>
570+
</div>
571+
<p>
572+
To increase the logging we can set the log level of <em>io.avaje.config.appconfig</em> to DEBUG or TRACE.
573+
</p>
574+
<div class="syntax xml"><div class="highlight"><pre><span></span><span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">&quot;io.avaje.config.appconfig&quot;</span> <span class="na">level=</span><span class="s">&quot;TRACE&quot;</span><span class="nt">/&gt;</span>
575+
</pre></div>
576+
</div>
577+
578+
525579
<h2 id="logging">Event Logging</h2>
526580
<p>
527581
By default, <code>avaje-config</code> will immediately log initialization events to it's own configured system logger. If you want to use your own configured logger, you can extend the <code>ConfigurationLog</code> interface and

http-client/index.html

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<ul>
8282
<li><a href="#auth-basic">basic auth</a></li>
8383
<li><a href="#auth-bearer">bearer token</a></li>
84+
<li><a href="#aws-cognito">AWS Cognito</a></li>
8485
</ul>
8586
</li>
8687
<li><a href="#logging">Logging</a>
@@ -1178,6 +1179,53 @@ <h4>Token will be obtained and set automatically</h4>
11781179
obtained for the initial request and then renewed when the token has expired.
11791180
</p>
11801181

1182+
<h2 id="aws-cognito">AWS Cognito</h2>
1183+
<p>
1184+
When using AWS Cognito for JWT Bearer tokens (OAuth2 client credentials flow) we can use
1185+
the supplied <em>io.avaje.aws:avaje-cognito-client-token</em> component.
1186+
</p>
1187+
1188+
<h4>Step 1: Add dependency</h4>
1189+
<div class="syntax xml"><div class="highlight"><pre><span></span><span class="nt">&lt;dependency&gt;</span>
1190+
<span class="nt">&lt;groupId&gt;</span>io.avaje.aws<span class="nt">&lt;/groupId&gt;</span>
1191+
<span class="nt">&lt;artifactId&gt;</span>avaje-cognito-client-token<span class="nt">&lt;/artifactId&gt;</span>
1192+
<span class="nt">&lt;version&gt;</span>1.0<span class="nt">&lt;/version&gt;</span>
1193+
<span class="nt">&lt;/dependency&gt;</span>
1194+
</pre></div>
1195+
</div>
1196+
1197+
<h4>Step 2: Configure the HttpClient</h4>
1198+
<p>
1199+
Use <em>CognitoAuthTokenProvider</em> to create an AuthTokenProvider.
1200+
Configure the HttpClient to use that AuthTokenProvider.
1201+
</p>
1202+
<p>
1203+
This will then automatically obtain access tokens from Cognito when
1204+
needed based on the access token expiry, and use the access token
1205+
in the Authorization header as a Bearer token.
1206+
</p>
1207+
<div class="syntax java"><div class="highlight"><pre><span></span><span class="c1">// create the Cognito AuthTokenProvider</span>
1208+
<span class="n">AuthTokenProvider</span> <span class="n">authTokenProvider</span> <span class="o">=</span> <span class="n">CognitoAuthTokenProvider</span><span class="o">.</span><span class="na">builder</span><span class="o">()</span>
1209+
<span class="o">.</span><span class="na">url</span><span class="o">(</span><span class="n">tokenUrl</span><span class="o">)</span>
1210+
<span class="o">.</span><span class="na">clientId</span><span class="o">(</span><span class="n">clientId</span><span class="o">)</span>
1211+
<span class="o">.</span><span class="na">clientSecret</span><span class="o">(</span><span class="n">clientSecret</span><span class="o">)</span>
1212+
<span class="o">.</span><span class="na">scope</span><span class="o">(</span><span class="n">scope</span><span class="o">)</span>
1213+
<span class="o">.</span><span class="na">build</span><span class="o">();</span>
1214+
1215+
<span class="c1">// use the authTokenProvider when building the HttpClient</span>
1216+
<span class="n">HttpClient</span> <span class="n">client</span> <span class="o">=</span> <span class="n">HttpClient</span><span class="o">.</span><span class="na">builder</span><span class="o">()</span>
1217+
<span class="o">.</span><span class="na">authTokenProvider</span><span class="o">(</span><span class="n">authTokenProvider</span><span class="o">)</span> <span class="c1">// HERE !!</span>
1218+
<span class="o">.</span><span class="na">bodyAdapter</span><span class="o">(</span><span class="k">new</span> <span class="n">JacksonBodyAdapter</span><span class="o">())</span>
1219+
<span class="o">.</span><span class="na">retryHandler</span><span class="o">(</span><span class="n">retry</span><span class="o">)</span>
1220+
<span class="o">.</span><span class="na">baseUrl</span><span class="o">(</span><span class="n">url</span><span class="o">)</span>
1221+
<span class="o">.</span><span class="na">build</span><span class="o">();</span>
1222+
</pre></div>
1223+
</div>
1224+
<p>
1225+
Note: the <em>Token URL</em> will typically be in the form: <br/>
1226+
<em>https://{my-app}.auth.{region}.amazoncognito.com/oauth2/token</em>
1227+
</p>
1228+
11811229

11821230
<h2 id="logging">Logging</h2>
11831231
<p>

0 commit comments

Comments
 (0)