コード例 #1
0
        public static async Task <ChallengeResult> Http01Authorization([ActivityTrigger] DurableActivityContext context, ILogger log)
        {
            var(site, authzUrl) = context.GetInput <(Site, string)>();

            var acme = await CreateAcmeClientAsync();

            var authz = await acme.GetAuthorizationDetailsAsync(authzUrl);

            // HTTP-01 Challenge の情報を拾う
            var challenge = authz.Challenges.First(x => x.Type == "http-01");

            var challengeValidationDetails = AuthorizationDecoder.ResolveChallengeForHttp01(authz, challenge, acme.Signer);

            var websiteClient = await CreateWebSiteManagementClientAsync();

            var credentials = await websiteClient.WebApps.ListPublishingCredentialsAsync(site);

            // Kudu API を使い、Answer 用のファイルを作成
            var kuduClient = new KuduApiClient(site.ScmSiteUrl(), credentials.PublishingUserName, credentials.PublishingPassword);

            await kuduClient.WriteFileAsync(DefaultWebConfigPath, DefaultWebConfig);

            await kuduClient.WriteFileAsync(challengeValidationDetails.HttpResourcePath, challengeValidationDetails.HttpResourceValue);

            return(new ChallengeResult
            {
                Url = challenge.Url,
                HttpResourceUrl = challengeValidationDetails.HttpResourceUrl,
                HttpResourceValue = challengeValidationDetails.HttpResourceValue
            });
        }
コード例 #2
0
        private Task DecodeOrderAuthorizationChallenges(ACMESharp.Crypto.JOSE.IJwsTool signer)
        {
            foreach (var authz in _lastOrder.Authorizations)
            {
                var miscList = new List <Challenge>();
                foreach (var ch in authz.Details.Challenges)
                {
                    switch (ch.Type)
                    {
                    case Dns01ChallengeValidationDetails.Dns01ChallengeType:
                        authz.DnsChallenge = AuthorizationDecoder.ResolveChallengeForDns01(
                            authz.Details, ch, signer);
                        miscList.Add(ch);
                        break;

                    case Http01ChallengeValidationDetails.Http01ChallengeType:
                        authz.HttpChallenge = AuthorizationDecoder.ResolveChallengeForHttp01(
                            authz.Details, ch, signer);
                        miscList.Add(ch);
                        break;

                    default:
                        miscList.Add(ch);
                        break;
                    }
                }
                authz.MiscChallenges = miscList.ToArray();
            }

            return(Task.CompletedTask);
        }
コード例 #3
0
        public void Test_Decode_OrderChallengeForHttp01_ForSingleHttp()
        {
            var testCtx = SetTestContext();

            var oldOrder = testCtx.GroupLoadObject <OrderDetails>("order.json");
            var oldAuthz = testCtx.GroupLoadObject <Authorization[]>("order-authz.json");

            var authzIndex = 0;

            foreach (var authz in oldAuthz)
            {
                var chlngIndex = 0;
                foreach (var chlng in authz.Challenges.Where(
                             x => x.Type == Http01ChallengeValidationDetails.Http01ChallengeType))
                {
                    Log.LogInformation("Decoding Authorization {0} Challenge {1}",
                                       authzIndex, chlngIndex);

                    var chlngDetails = AuthorizationDecoder.ResolveChallengeForHttp01(
                        authz, chlng, Clients.Acme.Signer);

                    Assert.Equal(Http01ChallengeValidationDetails.Http01ChallengeType,
                                 chlngDetails.ChallengeType, ignoreCase: true);
                    Assert.NotNull(chlngDetails.HttpResourceUrl);
                    Assert.NotNull(chlngDetails.HttpResourcePath);
                    Assert.NotNull(chlngDetails.HttpResourceContentType);
                    Assert.NotNull(chlngDetails.HttpResourceValue);

                    testCtx.GroupSaveObject($"order-authz_{authzIndex}-chlng_{chlngIndex}.json",
                                            chlngDetails);

                    ++chlngIndex;
                }
                ++authzIndex;
            }
        }