IIS 中的代理到私人 Prismic 仓库 - 这可能吗?

Proxy in IIS to a private Prismic repo - is it possible?

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

现在我想改为与 私有 Prismic 存储库交谈。

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

(我无法在 VSCode-rest-client-plugin either. There is documentation on how to get it to work in Postman 中使用它 - 这暗示我无法 "simply proxy" 调用私有 Prismic 存储库。)

附录:

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

正如我在评论中暗示的那样,我觉得我有点被 reverse proxy 的事情搞得分心了。如果我还差得远,请纠正我。

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

Prismic content is distributed through an API that can be configured as private. In private mode, the API requires the client application to authenticate itself to query, retrieve and display any content stored in a Prismic repository.

为了证明我不需要代理的观点,我在 Prismic 中开始了一个新的私人回购,并快速组合了一个 code pen that makes a simple request using 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');

(the pen has working credentials but it's a throwaway instance that I opened up for this answer so those will likely expire soon)

这引出了我的第一个建议:

使用 Angular 客户端库(Angular2+ or AngularJs 因为您没有指定版本)。如果您不关心 api 密钥泄漏 到 public (例如,它可能是内部网站的一个选项),请仅执行此操作 ).

假设您想对密钥保密

这可能就是你的情况。在这种情况下,类似于 will make sense. In short - you somehow authorise clients of your Angular SPA to your IIS-hosted app, and you use Prismic's .net client 库的流程可以满足来自客户端的请求。

回答您的具体问题:是的,可以实现从 SPA 调用 Prismic 的代理。您可以从 this somewhat official sample 开始并在

的基础上进行构建

完全可以使用 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 必须是 set up as a server variable。 IISManager->URL重写->ViewServerVariables->添加。
我没有费心去找出它的存储位置。

Handy tip 用于调试 URL 重写问题。