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 }); }
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); }
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; } }