如何使用Azure OAuth或Azure API Gateway保护Open xpage REST API

pgky5nke  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(117)

我使用xpages创建了一个REST API,该数据库具有匿名“作者访问”。还有Azure上的OAuth设置。因此API消费者将使用OAuth Url,客户端ID,客户端密码并生成Azure OAuth令牌并调用公共Xpages API端点,如下所示。
例如,我获取承载访问令牌并使用Azure Discoverykeys URL验证Azure令牌。是否有其他方法可以使用Azure API网关或OAuth保护此API。请注意:这是服务器到服务器的认证,并且没有用户交互可用。

<xe:restService pathInfo="locationupload">
        <xe:this.service>
            <xe:customRestService>
                <xe:this.doPost><![CDATA[#{javascript:try {
          var azureDiscoveryKeys="https://login.microsoftonline.com/tenentID/discovery/v2.0/keys";
            var token="Zdl09gMtY3KGHVyQ7UNmoWUJl3DAm7XG9af3zU8Bgb-1gwjfaAvgeobTA";
            var provider = new UrlJwkProvider(new URL(azureDiscoveryKeys));
            var jwt = JWT.decode(token);
            var jwk = provider.get(jwt.getKeyId());
            var publicKey = (RSAPublicKey) jwk.getPublicKey();

            var alg = Algorithm.RSA256(publicKey, null);
            var verifier = JWT.require(alg).build();

            verifier.verify(token);
          System.out.println("Token is Valid");
        

      }catch(JWTVerificationException ex) {
            System.out.println(ex.getMessage());
        } catch(JwkException ex) {
            System.out.println(ex.getMessage());
        }  catch(MalformedURLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e) {
          e.printStackTrace();
       }}]]></xe:this.doPost>
            </xe:customRestService>
        </xe:this.service>
    </xe:restService>
mcvgt66p

mcvgt66p1#

Domino 12.0.2可以配置为接受JWT令牌。配置后,您的服务器需要从Azure获取JWT并将其作为Authorization Bearer头发送。这同样适用于Domino REST API。
服务提供者(SP)并不关心访问令牌是如何生成的,因此您可能不需要OAUTH舞蹈,只需Azure到混合JWT即可
只要确保数据库没有匿名访问,这样Domino就可以处理JWT检查。

相关问题