0

我有一个 Angular(8) 解决方案,它通过托管 Angular 的同一 IIS 上的反向代理与公共 Prismic 存储库通信。

现在我想和一个私人的Prismic repo 谈谈。

如何设置代理以添加标头等?
甚至有可能还是授权还需要一个步骤?

(我也不让它在VSCode-rest-client-plugin中工作。有关于如何让它在Postman中工作的文档- 这就是暗示我不可能“简单代理”调用一个私人的棱镜回购。)

附录:

私有 Prismic 存储库有一个密钥,不能传递给客户端。
我希望在代理中添加秘密,因为我完全控制代理。

4

2 回答 2

1

正如我在评论中暗示的那样,我想我有点偏离了方向reverse proxy。如果我还有很长的路要走,请纠正我。

查看文档,据我了解,公共和私有 Prismic 存储库之间的唯一区别是您必须随每个请求一起传递额外的安全层(阅读:API 密钥)。

棱镜内容通过可配置为私有的 API 分发。在私有模式下,API 要求客户端应用程序对其自身进行身份验证,以查询、检索和显示存储在 Prismic 存储库中的任何内容。

在此处输入图像描述

为了证明我不需要代理的观点,我在 Prismic 中开始了一个新的私人仓库,并组合了一个快速代码笔,它使用angular-prismico作为示例发出一个简单的请求。这里值得注意的是PrismicProvider设置:

    PrismicProvider.setApiEndpoint('https://my-instance.cdn.prismic.io/api/v2');
    PrismicProvider.setAccessToken('my master key');
    PrismicProvider.setClientId('some client id');
    PrismicProvider.setClientSecret('some_secret');

(这支笔有工作凭证,但这是我为这个答案打开的一次性实例,所以这些可能很快就会过期)

这给我们带来了我的第一个建议:

使用 Angular 客户端库(Angular2+AngularJs,因为您没有指定版本)。仅当您不关心泄露给公众的 api 密钥时才执行此操作(例如,它可能是内部网站的一个选项)

假设您想保密密钥

这可能是你的情况。在这种情况下,类似于我的其他 SO 答案的流程将是有意义的。简而言之 - 您以某种方式授权 Angular SPA 的客户端到您的 IIS 托管应用程序,并使用Prismic 的 .net 客户端库来满足来自客户端的请求。

要回答您的具体问题:是的,可以实现从 SPA 调用 Prismic 的代理。您可以从这个有点官方的示例开始并在此基础上进行构建。

于 2020-02-18T01:23:33.060 回答
0

完全可以使用 IIS 的反向代理连接到 Prismic 私有仓库。
所需要的是设置 IIS 的反向代理并为其提供用于在 Prismic 进行授权的秘密。


在撰写本文时,我发现无法仅安装 IIS 的反向代理,但必须安装名为ARR的整个场扩展。

具有反向代理的是站点,而不是服务器,因此使用与以下内容web.config相对应的数据进行更新:(了解 xml 注释)

<system.webServer>
    <rewrite>
        <rules>
            <!-- `stopProcessing` is, I guess, the normal case. -->
            <rule name="CMS rewrite" stopProcessing="true">

                <!-- `"^cms(.*)"` matches `cms`, `cms/` and `cmsanything` which might not be what was intended. -->
                <match url="^cms(.*)" />

                <!-- Is is important to below Not use the `cdn` as in `yoursite.cdn.prismic.io` that is used for the queries. -->
                <!-- `logRewrittenUrl` can be handy for tracing the target. -->
                <action type="Rewrite" url="https://yoursite.prismic.io/api/v2" logRewrittenUrl="true" />

                <serverVariables>
                    <!-- Replace `the-token` with the token found when setting the Prismic repo to private. -->
                    <set name="HTTP_AUTHORIZATION" value="Bearer the-token" />
                </serverVariables>
            </rule>
...

还有一个点击和写入的 GUI,但至少对我来说,它更难理解。并解释。

关于 Prismic 后来如何处理让我烦恼的授权秘密,这是另一个问题。

HTTP_AUTHORIZATION必须设置为服务器变量。IISManager->URLRewrite->ViewServerVariables->添加。
我没有费心去找出它的存储位置。

调试 URL 重写问题的实用技巧

于 2020-02-23T14:31:19.157 回答