Dear Mr. Tuomi,

This is just to remind you that I haven’t received your response to my
e-mail I sent you. I’m afraid my e-mail may not have reached you.
If you have any questions or concerns, please let me know.

Best regards,

2021年1月19日(火) 18:52 福田泰葵 <taiki.fuk...@justsystems.com>:

> Thank you for your reply.
> But I need more help.
>
> How do I set request parameter of
> https://www.googleapis.com/oauth2/v2/userinfo?
>
> Logs:
>
> dovecot[30307]: lmtp(30320): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30320): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: Host 
> created
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: Host 
> session created
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: Need to 
> perform DNS lookup
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: Performing 
> asynchronous DNS lookup
> dovecot[30307]: auth: Debug: http-client[1]: request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]: Submitted (requests left=1)
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: DNS lookup 
> successful; got 20 IPs
> dovecot[30307]: auth: Debug: http-client: peer 172.217.31.170:443 (shared): 
> Peer created
> dovecot[30307]: auth: Debug: http-client: peer 172.217.31.170:443: Peer pool 
> created
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: Peer 
> created
> dovecot[30307]: auth: Debug: http-client[1]: queue 
> https://www.googleapis.com:443: Setting up connection to 172.217.31.170:443 
> (SSL=www.googleapis.com) (1 requests pending)
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: Linked 
> queue https://www.googleapis.com:443 (1 queues linked)
> dovecot[30307]: auth: Debug: http-client[1]: queue 
> https://www.googleapis.com:443: Started new connection to 172.217.31.170:443 
> (SSL=www.googleapis.com)
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: 
> Creating 1 new connections to handle requests (already 0 usable, connecting 
> to 0, closing 0)
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: Making 
> new connection 1 of 1 (0 connections exist, 0 pending)
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Connecting
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Waiting for connect (fd=22) to finish for max 0 msecs
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: HTTPS 
> connection created (1 parallel connections exist)
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: Client 
> connected (fd=22)
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Connected
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Starting SSL handshake
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x10, ret=1: 
> before/connect initialization
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> before/connect initialization
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv2/v3 write client hello A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv2/v3 read server hello A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv2/v3 read server hello A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv2/v3 read server hello A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 read server hello A
> dovecot[30307]: auth: Received valid SSL certificate: /OU=GlobalSign Root CA 
> - R2/O=GlobalSign/CN=GlobalSign
> dovecot[30307]: auth: Received valid SSL certificate: /C=US/O=Google Trust 
> Services/CN=GTS CA 1O1
> dovecot[30307]: auth: Received valid SSL certificate: 
> /C=US/ST=California/L=Mountain View/O=Google LLC/CN=upload.video.google.com
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 read server certificate A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 read server key exchange A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 read server done A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 write client key exchange A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 write change cipher spec A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 write finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 flush data
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv3 read finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv3 read finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv3 read finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=-1: 
> SSLv3 read finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1001, ret=1: 
> SSLv3 read finished A
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x20, ret=1: SSL 
> negotiation finished successfully
> dovecot[30307]: auth: Debug: www.googleapis.com: SSL: where=0x1002, ret=1: 
> SSL negotiation finished successfully
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: SSL 
> handshake successful
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: Ready 
> for requests
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: 
> Successfully connected (1 connections exist, 0 pending)
> dovecot[30307]: auth: Debug: http-client: peer 172.217.31.170:443: 
> Successfully connected (1 connections exist, 0 pending)
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: Using 1 
> idle connections to handle 1 requests (1 total connections ready)
> dovecot[30307]: auth: Debug: http-client[1]: queue 
> https://www.googleapis.com:443: Connection to peer 172.217.31.170:443 claimed 
> request [Req1: GET https://www.googleapis.com/oauth2/v2/userinfo]
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Claimed request [Req1: GET https://www.googleapis.com/oauth2/v2/userinfo]
> dovecot[30307]: auth: Debug: http-client[1]: request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]: Sent header
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: No more 
> requests to service for this peer (1 connections exist, 0 pending)
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: Got 
> 401 response for request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]: Unauthorized (took 46 ms + 59 
> ms in queue)
> dovecot[30307]: auth: Error: 
> oauth2(fukudata,118.103.29.199,<mgm9vz25BTZ2Zx3H>): oauth2 failed: No 
> username returned
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: 
> Response payload stream destroyed (0 ms after initial response)
> dovecot[30307]: auth: Debug: http-client[1]: request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]: Finished
> dovecot[30307]: auth: Debug: http-client[1]: queue 
> https://www.googleapis.com:443: Dropping request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]
> dovecot[30307]: auth: Debug: http-client: host www.googleapis.com: Host is 
> idle (timeout = 1799906 msecs)
> dovecot[30307]: auth: Debug: http-client[1]: request [Req1: GET 
> https://www.googleapis.com/oauth2/v2/userinfo]: Free (requests left=1)
> dovecot[30307]: auth: Debug: http-client[1]: peer 172.217.31.170:443: No 
> requests to service for this peer (1 connections exist, 0 pending)
> dovecot[30307]: auth: Debug: http-client: conn 172.217.31.170:443 [1]: No 
> more requests queued; going idle (timeout = 60000 msecs)
> dovecot[30307]: lmtp(30309): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30309): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30320): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30320): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30320): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30320): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30309): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30309): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30309): Connect from 10.243.148.110
> dovecot[30307]: lmtp(30309): Disconnect from 10.243.148.110: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30309): Connect from 10.243.148.110
> dovecot[30307]: lmtp(30309): Disconnect from 10.243.148.110: Remote closed 
> connection (state=READY)
> dovecot[30307]: lmtp(30309): Connect from 10.243.148.110
> dovecot[30307]: lmtp(30309): Disconnect from 10.243.148.110: Remote closed 
> connection (state=READY)
> sshd[30475]: Connection closed by 10.243.150.20 port 48174 [preauth]
> dovecot[30307]: imap-login: Disconnected (auth service reported temporary 
> failure): user=<fukudata>, method=PLAIN, rip=118.103.29.199, 
> lip=10.243.150.190, session=<mgm9vz25BTZ2Zx3H>
> dovecot[30307]: lmtp(30317): Connect from 10.243.148.174
> dovecot[30307]: lmtp(30317): Disconnect from 10.243.148.174: Remote closed 
> connection (state=READY)
>
> I would appreciate your reply.
>
> Yours faithfully,
>
> 2021年1月19日(火) 15:34 Aki Tuomi <aki.tu...@open-xchange.com>:
>
>
>> > On 19/01/2021 07:17 福田泰葵 <taiki.fuk...@justsystems.com> wrote:
>> >
>> >
>> > Dear Sir or Madam
>> > Unable to build OAuth2.0 authentication to Gmail using dovecot as proxy.
>> > I have a question about how to use dovecot as a proxy to perform OAuth
>> 2.0 authentication to Gmail using a mail client.
>>
>> Mail client is required, in this case, to provide valid oauth2 bearer
>> token. I don't think google supports other ways.
>>
>> >   1. Is the following all I need to do to authenticate to Gmail using
>> dovecot as a proxy?
>> >   * passdb
>> >   passdb {
>> >   driver = oauth2
>> >   mechanisms = oauthbearer xoauth2
>> >   args = /etc/dovecot/dovecot-oauth2.token.conf.ext
>> >   }
>> >   passdb {
>> >   driver = oauth2
>> >   mechanisms = plain login
>> >   args = /etc/dovecot/dovecot-oauth2.plain.conf.ext
>> >   }
>> >
>>
>> The plain config is a way to do 'password grant' authentication. This is
>> when username and password is used to acquire a bearer token.
>>
>> >   * create dovecot-oauth2.token.conf.ext and
>> dovecot-oauth2.plain.conf.ext
>> >   * create gmail service account api
>> >   2. grant_url in dovecot-oauth2.token.conf.ext and
>> dovecot-oauth2.plain.conf.ext is URL for obtaining a Google access token
>> for a web server that I have built myself?
>> >   3. I use a Gmail service account, so I don’t need a client ID and
>> secret ID, right?
>> >   4. Do I set introspection_url to the URL of my own web server with
>> the access token used for authentication to Google as the response?
>>
>> No. The introspection URL needs to point to a location where dovecot can
>> figure out more information about the user with token. If I recall
>> correctly, the token endpoint
>>
>> For gmail, you need to use https://www.googleapis.com/oauth2/v2/userinfo
>>
>> >   5. The documentation says “pass_attrs = host=127.0.0.1”, but if you
>> are authenticating to Gmail, I should use
>> >   “pass_attrs = proxy=y host=%{if;%s;eq;imap;imap.gmail.com (
>> http://imap.gmail.com);%{if;%s;eq;pop3;smtp .gmail.com (http://gmail.com
>> );pop.gmail.com (http://pop.gmail.com)}}
>> port=%{if;%s;eq;imap;993;%{if;%s;eq;pop3;587;465}} proxy_mech=xoauth2
>> pass=%{oauth2:access_token} user=%{oauth2:email oauth2:email}”?
>>
>> I would use something more readable, like passwd-file driver with
>> username_format=%s
>>
>> The access token is also imported as %{token} in passdb.
>>
>> >   6. What is the difference between dovecot-oauth2.token.conf.ext and
>> dovecot-oauth2.plain.conf.ext ? Do I need to configure both?
>> > I used
>> https://doc.dovecot.org/configuration_manual/authentication/oauth2/#proxy
>> as a reference.
>> > I would appreciate your reply.
>> > Yours faithfully,
>> > ------------------------------
>> > e-mail: taiki.fuk...@justsystems.com
>> > TEL: 03-5324-7900
>> > mobile: 080-6198-7328
>> > ------------------------------
>>
>> So this might work
>>
>> /etc/dovecot/oauth2-token.conf.ext
>>
>> introspection_url = https://www.googleapis.com/oauth2/v2/userinfo
>> introspection_mode = auth
>> username_attribute = email
>> pass_attrs = proxy=y proxy_mech=xoauth2
>>
>> /etc/dovecot/dovecot.conf
>>
>> auth_mechanisms = xoauth2 oauthbearer
>>
>> passdb {
>>   driver = oauth2
>>   args = /etc/dovecot/oauth2-token.conf.ext
>>   result_success = continue-ok
>> }
>>
>> passdb {
>>   driver = passwd-file
>>   args = username_format=%s /etc/dovecot/endpoints
>>   skip = unauthenticated
>> }
>>
>> /etc/dovecot/endpoints
>>
>> imap::::::: host=imap.gmail.com
>> pop3::::::: host=pop3.gmail.com
>> submission::::::: host=smtp.gmail.com
>>
>> Aki
>>
>

Reply via email to